Laravel多队列同时执行

业务场景

使用larave框架开发,有多个队列任务,其中有个别任务特别耗时,使用单个队列的话必须等待前一个任务完成下一个任务才会开始,这个时候就需要给耗时的任务单独分配队列,任务之间互不影响,可以同时单独执行。

生产者设置

生产者负责生产消息,多队列需要在生产消息时指定该任务需要分配的队列名称。

假设有两个队列任务,任务1分配到队列1,任务2分配到队列2,代码示例:

dispatch($data1)->onQueue('queue1');
dispatch($data2)->onQueue('queue2');

消费队列设置

这里为每个队列单独设置一条队列命令

//打开第一个终端
php artisan queue:work --queue=queue1
//打开第二个终端
php artisan queue:work --queue=queue2

可以在系统的crontab或者使用supervisor进行任务执行和监控

supervisor配置可以参考

[program:queue1]
process_name=queue1
command=php /var/www/html/artisan queue:work --queue=queue1 --timeout=10000
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/queue1.log

[program:queue2]
process_name=queue2
command=php /var/www/html/artisan queue:work --queue=queue2 --timeout=10000
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/queue2.log

需要注意的是两个任务虽然可以合并成一条执行命令,像

php artisan queue:work --queue=queue1,queue2

这样可以同时启动两个队列,但是两个队列还是会排队执行,不会并行执行,如果任务不耗时,任务量不多,可以使用这种方式

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值