laravel使用队列的一点思考
几个重要的point:
1、运行队列进程时,通过 --tries 参数项来设置队列任务允许的最大尝试次数,如果没有指定 --tries 选项的值,任务会被无限期重试。
自己遇到的坑,一直没设置--tries导致一直没看到失败任务的报错信息。
2、失败任务的回调函数要这样写:
public function failed(\Exception $exception)
{
// 发送失败通知, etc...
DB::table('test')->insert([
'key'=>'12',
'data1'=>'error',
'created_at'=>date('Y-m-d H:i:s')
]);
}
failed函数里的参数一定不要忘记“\”,文档里没有加“\”,\Exception $exception。
3、失败任务会记录在failed_jobs表中,可在queue.php中配置,表名failed_jobs可配
'failed' => [
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],
//我是分割线
php artisan queue:failed-table
php artisan migrate --path=xxx
项目命令行不要忘记上面这两句,如果还有其他迁移文件需要注意,加上--path指定文件。
4、错误日志已配置,但是没有输出到错误日志文件中,待解决,附配置文件:
[program:queue]
process_name=%(program_name)s_%(process_num)02d
command=/Applications/MAMP/bin/php/php7.1.3/bin/php /Users/cl/Documents/my/laravel56/artisan queue:work --tries=1
autostart=true
autorestart=true
user=cl
numprocs=8
redirect_stderr=false
stdout_logfile=/Users/cl/Documents/my/forge/laravel56/worker.log
stderr_logfile=/Users/cl/Documents/my/forge/laravel56/workererror.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
5、如果对任务队列相关代码进行修改,记得在项目命令行执行:
php artisan queue:restart
如果对supervisor进行配置修改
supervisorctl update
supervisorctl reload
浙公网安备 33010602011771号