【问题标题】:RabbitMQ + PHP deployment strategyRabbitMQ + PHP 部署策略
【发布时间】:2011-12-20 14:08:39
【问题描述】:

我有一个使用 RabbitMQ 的 PHP 项目 (Symfony2)。我使用它作为简单的消息队列来延迟一些工作(发送邮件、来自 API 的重要数据)。消费者在网络服务器上运行,他们的代码是网络服务器存储库的一部分 - 它们与网络部署在同一位置。

问题是: 如何将消费者作为守护进程启动并确保它们始终运行? 在部署应用程序时,我如何“优雅地”关闭消费者,以便他们停止消费但完成对他们开始的消息的处理?

如果它很重要,我使用 Capifony 进行部署。

谢谢!

【问题讨论】:

    标签: php deployment rabbitmq


    【解决方案1】:

    也许值得看看用 python 编写的 supervisord。我以前用它来运行 Gearmand 的工作程序,这是一个作业队列,与您使用 RabbitMQ 的方式类似。

    【讨论】:

    • 这看起来很有希望,尽管它并没有解决一个重要的问题——优雅地关闭消费者(即不杀死他们)。我会尝试解决这个问题。
    • 啊,我想我解决了这个问题,方法是让我的 PHP 工作人员侦听某些系统信号,然后一旦收到,就会在他们完成当前工作后终止。 Supervisord 可以配置为发送不同的信号来处理,而不仅仅是 Kill -9 等价物。