今天就对 Laravel
的队列功能做个简单的事例,我使用的驱动是 redis
,详细可以查看文档。
生成任务类
1 | php artisan make:queue SendMsg |
就会在 app/Jobs
目录下面生成 SendMsg.php
文件,下面我们去编辑。
1 |
|
分发任务
分发任务有 3 中方式,具体如下:1
2
3
4
5
6
7
8
9
10
11# 在控制器中,可以直接用
$this->dispatch(new SendMsg("job test msg"));
# 类方法执行
SendMsg::dispatch("job test msg");
# 辅助函数调用
dispatch(new SendMsg("job test msg"));
# 延迟分发
SendMsg::dispatch("job test msg")->delay(now()->addMinutes(10)); // 延迟 10 分钟
执行任务
我们需要单独启用 php 来执行其任务队列,直接使用:1
2
3
4
5
6
7
8php artisan queue:work
# 后面常用参数
--queue: 执行的队列名称
--tries:任务任务失败尝试次数
--timeout:任务执行最大秒数
--daemon:后台运行,作为守护进程
--sleep: 没有任务休眠,默认为 3s
Supervisor
如果队列作为守护进程的话,需要监控,这里采用 python
写的 Supervisor
,下面就是其具体配置:1
2
3
4
5
6
7
8
9
10
11#/etc/supervisor/conf.d/laravel.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/logs/laravel.log
执行命令 supervisorctl start all
启动,可以用 supervisorctl status
查看状态,其他命令:1
2
3
4supervisorctl start
supervisorctl stop
supervisorctl status
supervisorctl restart
©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 & 作者信息。
Happy Coding