Horizon管理的队列,调大processes的值会被重复执行

项目使用Laravel Horizon管理队列,队列驱动是redis,生产环境CentOS7.8,Supervisor托管Horizon(1个Supervisor进程)

由于要处理的队列任务多,故在horizon.php配置文件中增加了processes的值,但增加后出现重复执行的问题,Horizon控制台查看是同一时间执行了两次,并非因为超时重复执行的,我在网上搜索说不会重复执行的,但我这边确实发现了,只是dispatch了一次,随机性的不是经常出现,并发大的时候就会出现,有人有类似的情况吗?是不是因为增加了processes,两个processes同时执行了,请问大神有解决方法吗?

'environments' => [
        'production' => [
            'supervisor-1' => [
                'connection' => 'redis',
                'queue' => ['default','Notify','Query','Withdrawal'],
                'balance' => 'simple',
                'processes' => 16,
                'tries' => 1,
            ],
        ],
],
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

上锁就行,自己加个锁

4年前 评论
KingV (楼主) 4年前
讨论数量: 4
giao哥

存在一种可能,你的接口或者业务逻辑并发多次执行而导致队列 distpacth 两次,而非队列执行两次。

4年前 评论
KingV (楼主) 4年前
giao哥 (作者) 4年前

上锁就行,自己加个锁

4年前 评论
KingV (楼主) 4年前
xiaopi

我也用redis+horizon,开了一百多个进程,未发现重复执行的问题。应该是业务代码的问题。laravel队列内部已经做了加锁处理,不会多个进程同时消费一个队列数据,所以还是多看看代码吧。

4年前 评论

盲猜是你dispatch的业务逻辑被调用了2次 :wink: 例如表单重复提交

4年前 评论

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