PHP artisan queue:work --queue=high,default,low --delay=3 --sleep=3 --tries=1 --quiet
Redis-db0 出现 form_database_queues 合集。 form_database_queues:default ( 一条记录)
{
"displayName":"App\Jobs\TestJob",
"job":"Illuminate\Queue\CallQueuedHandler@call",
"maxTries":null,
"delay":null,
"timeout":null,
"timeoutAt":null,
"data":{
"commandName":"App\Jobs\TestJob",
"command":"O:16:"App\Jobs\TestJob":8:{s:2:"id";s:6:"123456";s:6:"*job";N;s:10:"connection";N;s:5:"queue";N;s:15:"chainConnection";N;s:10:"chainQueue";N;s:5:"delay";N;s:7:"chained";a:0:{}}"
},
"id":"Apto66 iWBNzHsw6 JNHlXAuZChDxfMP1 g",
"attempts":0
}
# 只执行一条记录后退出
PHP artisan queue:work --once
//delay 表示延时处理,整数表示秒数,也可以是固定时间
$dis = dispatch (new \App\Jobs\TestJob ($id));
if ($delay>0){$dis->delay ($delay);
}
当 tries=0 (默认值),当 job 处理失败(抛出异常时),会一直死循环执行。所以 tries=1 ( 最小也要为 1)。 当达到 tries 数次后,该 job 会被加入到 failed_jobs 表中
默认为 0
PHP artisan queue:flush
PHP artisan queue:restart
工作原理:队列启动后,记录 illuminate:queue:restart 的 cache 值 在执行一个新的任务前,判断 illuminate:queue:restart 的 cache 值是否已变化,若变化,则结束队列进程。所以需结合 super 守进程使用。
当队列没有 job 时,休眠多少秒,这个主要是看你任务的及时性
多数应用并不需要将任务分配成多到队列,单个队列已经非常适用。但是,应用的任务有优先级差异或者类别差异的时候,多队列将是更好地选择,尤其 Laravel 的队列进程已经支持的情况下。举个例子,你可以将高优先级的任务委派到 “high”(高优先级)队列,从而让它优先执行。
PHP artisan queue:work --queue=high,default
当一个任务执行的内存超过指定的内存。会被 killed ( 队列进程会中断)
当一个任务执行时间超过 timeout 指定的秒数。会被 killed ( 队列进程会中断)。 仅适用于 PHP7.1 或更高版本(需 pcntl 扩展),它也不适用于 Windows
PHP artisan queue:failed-table