1

在 Shopware 6 中运行多个消息队列工作程序是否有最佳实践?我们禁用了 Admin Worker 并配置了 supervisor.d 来运行 5 个进程messenger:consume和 1 个scheduled-task:run. 我们遇到了一些奇怪的问题:Enqueue 似乎有大约 20 分钟的处理时间限制 ( redeliver_after)。处理 20 分钟后,一项工作似乎被认为是陈旧的,任何其他工作人员都可以自由承担责任。我们还有无限循环的消息分发。enqueue和 Shopware 之间的整个协作symfony/messenger非常复杂,Shopware 文档对此进行了分析。

4

1 回答 1

0

由于没有其他人发布答案,我将自己回答这个问题。我们发现:即使只有一个工作人员作业运行超过 20 分钟,也会导致表 message_queue_stats 上的约束违反。我们有一两个工作超过了这个限制。我们将尝试增加此限制。此外,我们在 MySQL 中的 enqueue 表上遇到死锁。我想这需要进一步调查。最后我们切换到 Redis 进行队列持久化。这里有两个选择:Symfony Messenger 的 Redis 适配器或 Enqueue 的 Redis 适配器。我们尝试了这两种方法,并且它与 Enqueues Redis 适配器一起工作得更好。请记住,Shopware 建议使用 RabbitMQ 来拥有多个工人。

于 2021-09-12T17:27:24.397 回答