Laravel 启用多个 work 对同一个队列进行处理的时候是否会出现同步执行

  • 答案:不会
  • 请看Redis中队列的数据结构,每个Job会分配一个唯一的ID
    {
    "job": "Illuminate\\Queue\\CallQueuedHandler@call",
    "data": {
    "commandName": "App\\Jobs\\SendFile3",
    "command": "O:18:\"App\\Jobs\\SendFile3\":4:{s:6:\"\u0000*\u0000job\";N;s:10:\"connection\";N;s:5:\"queue\";s:8:\"sendfile\";s:5:\"delay\";N;}"
    },
    "id": "hadBcy3IpNsnOofQQdHohsa451OkQs88",
    "attempts": 1
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3
yybawang

一般多是用redis来做队列, redis 读写是单进程的,即使并发也是一条条执行,pop之后,别的进程就读不到了,所以肯定不会啊,id我也没研究过,就理解成二次防护吧

4年前 评论

但是数据如果开启多个Job处理队列处理同一个任务,则任务会变成类似并发的情况,所以Job需要引入一个概念,Job锁

4年前 评论
xin6841414

处理器相当于消费者, 一个任务只能分配给一个消费者,多个消费者消费同一队列会轮询分配,类似负载均衡,你这个问题人家开发者早就考虑到了,不用担心

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!