资讯专栏INFORMATION COLUMN

高性能千万级定时任务管理服务forsun laravel插件使用详解

Muninn / 1070人阅读

摘要:高性能高精度定时服务,轻松管理千万级定时任务。支持任务到期触发和。支持创建延时任务和定时到期任务,和原生保持相同接口,轻松使用。不支持任务输出任务钩子及维护模式。是不指定任务名时自动生成,每个任务名必须唯一,相同任务名重复定义将会自动覆盖。

Forsun高性能高精度定时服务,轻松管理千万级定时任务。

定时服务项目地址:https://github.com/snower/forsun

laravel插件项目地址: https://github.com/snower/for...

轻松支持千万级定时任务调度。

定时任务触发推送到Queue,轻松支持跨机器和共性能分布式。

支持任务到期触发command、Job、Shell、Http和Event。

支持驱动原生Laravel Schedule运行。

支持创建延时任务和定时到期任务,和原生Laravel Schedule保持相同接口,轻松使用。

背景

在实际项目中,存在大量需要定时或是延时触发的任务,比如电商中,延时需要检查订单是否支付成功,是否配送成功,定时给用户推送提醒等等,常规做法是用 crontab 每分钟扫码数据看是否到达时间,繁琐且扩展性伸缩性较差。

使用 forsun 服务,可以简单的针对每一个订单创建一个定时任务,配合异步队列,可以轻松实现扩展性伸缩性,Apache Thrift 的编程接口也可以很容易的和 celery、laravel 配合。

其他场景下,比如失败延时重试,使用 forsun 定时服务也可以很简单就可以实现。

安装

安装启动forsun服务,详情请看 https://segmentfault.com/a/11...。

composer安装forsun-laravel。

composer require "snower/forsun-laravel"
配置

在 config/app.php 注册 ServiceProvider 和 Facade

"providers" => [
    // ...
    SnowerLaravelForsunServiceProvider::class,
],
"aliases" => [
    // ...
    "Forsun" => SnowerLaravelForsunFacade::class,
],

创建配置文件

php artisan vendor:publish --provider="SnowerLaravelForsunServiceProvider"

修改应用根目录下的 config/forsun.php 中对应的参数即可。

使用 定义调度

Artisan 命令调度。

//不指定name是自动生成
Forsun::plan()->command("emails:send --force")->daily();

//指定name
Forsun::plan("email")->command(EmailsCommand::class, ["--force"])->daily();

队列任务调度

Forsun::plan()->job(new Heartbeat)->everyFiveMinutes();

Shell 命令调度

Forsun::plan()->exec("node /home/forge/script.js")->daily();

Event事件调度

Forsun::plan()->fire("testevent", [])->everyMinute();

Http事件调度

Forsun::plan()->http("http://www.baidu.com")->everyMinute();

注意:

每个任务只能设置一次调度频率。

不支持任务输出、任务钩子及维护模式。

Forsun::plan是不指定任务名时自动生成,每个任务名必须唯一,相同任务名重复定义将会自动覆盖。

移除调度
$plan = Forsun::plan()->command("emails:send --force")->daily();
$plan->remove();

$plan = Forsun::plan()->command("emails:send --force")->daily();
$plan_name = $plan->getName();
Forsun::remove($plan_name);
调度频率设置
方法 描述
->hourly(); 每小时运行
->hourlyAt(17); 每小时的第 17 分钟执行一次任务
->daily(); 每天午夜执行一次任务
->dailyAt("13:00"); 每天的 13:00 执行一次任务
->monthly(); 每月执行一次任务
->monthlyOn(4, "15:00"); 在每个月的第四天的 15:00 执行一次任务
->everyMinute(); 每分钟执行一次任务
->everyFiveMinutes(); 每五分钟执行一次任务
->everyTenMinutes(); 每十分钟执行一次任务
->everyFifteenMinutes(); 每十五分钟执行一次任务
->everyThirtyMinutes(); 每半小时执行一次任务
->at(strtoetime("2018-03-05 12:32:12")); 在指定时间2018-03-05 12:32:12运行一次
->interval(10); 从当前时间开始计算每10秒运行一次
->later(5); 从当前时间开始计算稍后5秒运行一次
->delay(30); 从当前时间开始计算稍后30秒运行一次

需要复杂定时控制建议生成多个定时任务或是在处理器中再次发起定时任务计划更简便同时也性能更高。

调度器应该尽可能使用Event或是Job通过Queue Work可以更高性能运行。

驱动原生Laravel Schedule运行
#注册
php artisan forsun:schedule:register

#取消注册
php artisan forsun:schedule:unregister

原文链接: https://blog.snower.me/2018/0...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28358.html

相关文章

  • 有赞业务对账平台的探索与实践

    摘要:业务对账平台的核心目的,就是及时发现类似问题,并及时修复。这对对账平台的吞吐量造成了挑战。五健康度对账中心可以拿到业务系统及其所在整个链路的数据一致性信息。在分布式环境下,没有人能回避数据一致性问题,我们对此充满着敬畏。 一、引子 根据CAP原理,分布式系统无法在保证了可用性(Availability)和分区容忍性(Partition)之后,继续保证一致性(Consistency)。我...

    wangjuntytl 评论0 收藏0
  • UPYUN Open Talk :同盾,从零打造万级实时风控云服务

    摘要:同盾技术总监张新波在第二期移动时代互联网金融的架构趋势中阐述了同盾是如何从零开始打造千万级实时风控云服务,具体介绍了同盾系统平台构建过程中主要需要解决的三大难题,以及解决这些问题的具体时实践过程。 同盾科技,是由阿里、Paypal 反欺诈专家创建的,国内第一家风险控制与反欺诈云服务提供商,其涉及领域包括电商、B2B、互联网金融、游戏等。同盾技术总监张新波在 UPYUN Open ...

    malakashi 评论0 收藏0
  • 万级消息设计--初级篇(二)

    摘要:需求用户个人消息,平台消息平台给所有人发送消息。原因如果平台用户量较大时,假如万,发一条系统消息,将要给万的人发送一条,就是的消息记录。千万级的数据表,后期通过索引优化,结构优化,业务逻辑优化,避免大量并发查询。 说明 本文都是参加工作的实际情况,希望对大家有所帮助。—— 蚂蚁爬树不怕高,有心学习不怕老。 需求 1.用户个人消息,平台消息(平台给所有人发送消息)。2.用户未读消息展示,...

    youkede 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<