美文网首页
Laravel多队列同时执行

Laravel多队列同时执行

作者: 不能吃的坚果j | 来源:发表于2022-06-09 11:45 被阅读0次

    业务场景

    使用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多队列同时执行

          本文链接:https://www.haomeiwen.com/subject/fuhmmrtx.html