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

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

你可能感兴趣的:(Laravel多队列同时执行)