【发布时间】:2017-05-31 07:42:20
【问题描述】:
我正在开发一个 Symfony 3.1 应用程序,它基本上将作业消息放在 RabbitMQ 队列中,并通过主管,我生成了一些消耗 RabbitMQ 消息的进程并执行在 Symfony 中管理的作业。消费者的工作是解码消息并创建一个新的Symfony\Bundle\FrameworkBundle\Console\Application,注入相同的内核并执行一个具有读/写数据库操作的 Symfony 命令。
问题从这里开始。通常,同时,我通常会留下 4 个工作进程来使用消息。同时,所有消费者都使用不同的数据执行相同的数据库操作,因此基本上所有进程都执行相同的 Symfony RabbitMQ 消费者。有时它工作得很好,没有任何问题,但有时 MySQL 返回错误"MySQL server has gone away",通常要解决这个问题,我必须重新启动主管服务,以便工作进程被杀死并再次产生。通常在重新启动后它可以正常工作几个小时,但它的模式确实无法预测。
这不是 MySQL 连接超时,因为我确定它们是小型操作,并且我增加了 MySQL 的 connect_timeout。我也将wait_timeout 增加到 2 天,所以基本上这并不能解决问题。
【问题讨论】:
标签: php mysql symfony rabbitmq supervisord