节奏 经过 史蒂夫·鲍曼 Laravel 的调度方式有所不同。它并非将所有定时任务集中在一个调度文件中,而是允许你将一个或多个调度直接附加到单独的 Eloquent 模型实例上,每个实例都有自己的表达式和时区,并在到期时触发事件。
工作原理
安装软件包并发布迁移后,您将获得
schedules
包含对任何模型的多态引用、调度表达式、可选时区和预计算值的表
next_run_at
/
last_run_at
时间戳。
添加
Schedulable
接口和
HasSchedules
添加到您想要安排的任何模型的特征:
使用
DirectoryTree\Cadence\HasSchedules
;使用
目录树\Cadence\可调度
;班级
订阅
延伸
模型
实现
可调度{
使用
HasSchedules
;}
然后将计划任务附加到模型实例。Cadence 自带 cron 表达式和 RRULE 模式的驱动程序,您可以选择要安装的库:
# 用于 cron 表达式作曲家
要求
dragonmantank/cron-expression# 对于 RRULE(选择一项)作曲家
要求
rlanvin/php-rrule# 或者作曲家
要求
simshaun/recurr
基于 cron 的调度程序很简单:
使用
目录树\Cadence\驱动程序\CronSchedule
;// 此订阅费用将于每月1日午夜收取订阅
->
添加日程
(
新的
定时任务计划
(
'0 0 1 * *'
));
对于更丰富的重复执行需求,RRULE 提供了更多控制 cron 中难以表达的内容的方法:
使用
目录树\Cadence\驱动程序\规则计划
;每两周的周二和周四订阅
->
添加日程
(
新的
规则表
(
'FREQ=每周;INTERVAL=2;BYDAY=周二,周四'
));
日程安排会考虑时区,因此不同地区的用户都能获得正确的当地时间:
订阅
->
添加日程
(
新的
定时任务计划
(
'0 8 * * 1'
,
澳大利亚/悉尼
)
// 悉尼时间周一上午 8 点(英文):
调度与反应
Cadence 提供了一种
schedules:run
使用 Artisan 命令向 Laravel 的调度器注册,使其每分钟运行一次:
// routes/console.php日程
::
命令
(
'schedules:run'
)
->
不重叠
()
->
每分钟
();
每次运行时,它都会找到所有记录
next_run_at
逾期未付,解雇
ScheduleTriggered
每次事件发生后,都会触发下一次事件。您的应用程序通过监听器做出响应:
使用
DirectoryTree\Cadence\Events\ScheduleTriggered
;班级
处理到期订阅{
民众
功能
处理
(
定时触发
$event)
:
空白{订阅
=
$事件
->
日程
->
可安排的;订阅
->
流程续订
();}}
该事件包含日程记录,使您可以访问父模型、表达式和时间戳,以便按模型类型进行分支或记录运行的内容和时间。
可扩展性
如果 cron 和 RRULE 都不合适,您可以通过扩展基础驱动程序来实现自定义驱动程序。
Schedule
类和实现
resolveNextOccurrence()
,它收到一个
CarbonInterface
并返回下一个匹配项。驱动程序按名称注册,因此以后更换或续订驱动程序非常简单。
您可以访问[此处插入链接]了解更多信息并查看源代码。 GitHub 。







