Laravel多队列同时执行

本文介绍了如何在Laravel框架下处理耗时队列任务,通过为不同任务分配独立队列,确保任务之间互不影响并能并发执行。设置生产者指定任务队列,然后为每个队列启动单独的消费者进程。使用`php artisan queue:work --queue`命令分别监控每个队列,并通过Supervisor进行进程管理和监控。这种方法适用于任务耗时长但需要快速响应的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务场景

使用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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值