php artisan make:job 文件名称 创建队列
php artisan queue:work --daemon 启动且监听
php artisan queue:work --queue={GeneratePdfReport} 消耗一次队列
php artisan queue:restart 重启队列
生成文件修改:
class GeneratePdfReport implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* 任务运行的超时时间。
*
* 置时间必须小于默认时间 ,默认 90秒
* @var int
*/
public $timeout = 70;
/**
* 任务最大尝试次数。
*
* @var int
*/
public $tries = 5;
/***
* 报告ID
* @var
*/
protected $report_id;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($report_id)
{
$this->report_id = $report_id;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//调用消费的方法
xxxxxx::xxx($id);
}
}
调用方法:
//插入队列,延迟1分钟执行
dispatch(new GeneratePdfReport($id))->delay(Carbon::now()->addMinutes(1));
supervisor 进程管理 安装按照laravel文档即可
1、cd /etc/supervisor 进入服务监控配置文件目录
2、vim supervisord.conf 添加下面代码块
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
3、cd ./conf.d 进入配置目录 vim dingxiang-pdf-worker.conf 添加下面代码(需要看下,command与stdout_logfile目录更换为自己的)
[program:dingxiang-pdf-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/local/bin/php 项目路径/artisan queue:work redis --sleep=3 --daemon
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=项目路径/storage/logs/worker.log
4、sudo killall supervisord 关闭所有进程
5、supervisord -c /etc/supervisor/supervisord.conf 重新启动并载入新的配置
6、supervisorctl status 查看管理进程状态(所有配置文件名称存在即可)
https://blog.51cto.com/sf1314/2128372?utm_source=oschina-app 错误举例