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,
            ],
        ],
],
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

上锁就行,自己加个锁

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

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

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

上锁就行,自己加个锁

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

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

4年前 评论

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

4年前 评论

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