在Shopware 6中运行多个消息队列工作进程有什么最佳实践吗?我们禁用了管理工作者,并配置了supervisor.d来运行5个messenger:consume进程和1个scheduled-task:run进程。我们遇到了一些奇怪的问题:入队似乎有大约20分钟的处理时间限制(redeliver_after)。经过20分钟的处理后,一个工作似乎被认为是过时的,任何其他工人都可以自由地承担责任。我们也有无限的消息调度循环。enqueue,symfony/messenger和Shopware之间的整个协作是如此复杂,Shopware文档也是如此解析。
发布于 2021-09-12 17:27:24
由于没有其他人发布答案,我将自己回答这个问题。我们发现:即使只有一个工作者,作业运行超过20分钟也会导致表message_queue_stats上的约束冲突。我们有一两个工作超过了这个限制。我们将尝试增加此限制。此外,我们在入队表的MySQL中遇到死锁。我想这需要进一步的调查。最后,我们切换到Redis来实现队列持久性。这里有两个选项:来自Symfony Messenger的Redis Adapter或用于入队的Redis Adapter。我们两个都试过了,它在Enqueues Adapter上工作得更好。请记住,Shopware建议在拥有多个workers时使用RabbitMQ。
https://stackoverflow.com/questions/67770329
复制相似问题