RabbitMQ + PHP 部署策略

4
我有一个使用RabbitMQ的PHP项目(Symfony2),它作为简单的消息队列来延迟一些任务的执行(发送邮件,从API获取重要数据)。消费者在web服务器上运行,它们的代码属于Web服务器repo的一部分 - 与Web一起部署。
问题是: 1.如何将消费者作为守护程序启动,并确保它们始终运行? 2.在部署应用程序时,如何“优雅”地关闭消费者,使其停止消费但仍能完成已开始处理的消息?
如果有必要,我使用Capifony进行部署。
谢谢!
1个回答

2

也许值得看一下Supervisord,它是用Python编写的。我以前用过它来运行Gearmand的工作进程,Gearmand是一个作业队列,类似于您使用RabbitMQ的方式。


看起来非常有前途,尽管它没有解决一个重要问题 - 优雅地关闭消费者(即不杀死它们)。我会试着解决这个问题。 - gphilip
啊哈,我认为我已经解决了这个问题,通过让我的 PHP 工作进程监听某些系统信号,然后一旦接收到信号,在完成当前作业后就会终止。Supervisord 可以配置发送不同的信号给进程,而不仅仅是 Kill -9 的等效信号。 - James Butler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接