您现在的位置是:网站首页 > 心得笔记

laravel框架中使用任务调度

盛悦2019-09-127181人围观
简介在项目开发中,任务调度随处可见,比如:消息推送,我就需要使用定时任务,根据消息推送时间检索并更新消息最新的状态并发布出去

1、使用场景

后台消息管理模块,根据推送时间分为定时发送、已发送、已撤销三个状态,这时候我在新增成功后运用模型观察器可以实时的根据时间改变状态,但是仅仅这样是不够的,我还需要实时监控其时间以至于按照推送时间推送出去,这个时候我就需要使用定时任务!

2、使用方法


2.1、生成命令

要创建一个新的命令,可以使用 Artisan 命令 make:command。这个命令会在 app/Console/Commands 目录中创建一个新的命令类。 不必担心应用中不存在这个目录,因为它会在你第一次运行 Artisan 命令 make:command 时创建。生成的命令会包括所有命令中默认存在的属性和方法:

php artisan make:command MessageStatus

18.png

2.2、命令结构

命令生成后,应先填写类的 signaturedescription 属性,这会在使用 list 命令的时候显示出来。执行命令时会调用 handle 方法,你可以在这个方法中放置命令逻辑。

19.png

2.3、定义调度

App\Console\Kernel 类的 schedule 方法中定义所有调度任务。

protected function schedule(Schedule $schedule)
{
    // 每分钟执行一次『消息推送』状态更新操作
    $schedule->command('fxxt:message-status-db')->everyMinute();
}


2.4、模拟执行任务调度

php artisan schedule:run

20.png


到此,开发流程就结束了!

调度频率设置

当然,你可以为你的任务分配多种调度计划:

方法描述
->cron('* * * * *');在自定义的 Cron 时间表上执行该任务
->everyMinute();每分钟执行一次任务
->everyFiveMinutes();每五分钟执行一次任务
->everyTenMinutes();每十分钟执行一次任务
->everyFifteenMinutes();每十五分钟执行一次任务
->everyThirtyMinutes();每半小时执行一次任务
->hourly();每小时执行一次任务
->hourlyAt(17);每小时的第 17 分钟执行一次任务
->daily();每天午夜执行一次任务
->dailyAt('13:00');每天的 13:00 执行一次任务
->twiceDaily(1, 13);每天的 1:00 和 13:00 分别执行一次任务
->weekly();每周执行一次任务
->monthly();每月执行一次任务
->monthlyOn(4, '15:00');在每个月的第四天的 15:00 执行一次任务
->quarterly();每季度执行一次任务
->yearly();每年执行一次任务
->timezone('America/New_York');设置时区

以下是额外限制条件的列表:

方法描述
->weekdays();将任务限制在工作日
->sundays();将任务限制在星期天
->mondays();将任务限制在星期一
->tuesdays();将任务限制在星期二
->wednesdays();将任务限制在星期三
->thursdays();将任务限制在星期四
->fridays();将任务限制在星期五
->saturdays();将任务限制在星期六
->between($start, $end);限制任务运行在开始到结束时间范围内
->when(Closure);根据闭包函数的返回来限制任务