2011-12-20 122 views
4

我有一個使用RabbitMQ的PHP項目(Symfony2)。我使用它作爲簡單的消息隊列來延遲一些工作(發送郵件,來自API的重要數據)。消費者在網絡服務器上運行,他們的代碼是網絡服務器回購的一部分 - 它們與網絡一樣部署。RabbitMQ + PHP部署策略

問題是: 如何啓動消費者作爲守護進程並確保它們始終運行? 部署應用程序時,如何「優雅地」關閉消費者,以便他們停止消費,但是完成處理他們開始的消息?

如果它很重要,對於部署我使用Capifony。

謝謝!

回答

2

這可能值得看看用Python編寫的supervisord。我之前使用它來運行Gearmand的工作人員,這是一個工作隊列,其功能類似於您使用RabbitMQ的方式。

+0

這看起來很有希望,儘管它沒有解決一個重要問題 - 優雅地關閉消費者(即不殺死消費者)。我會盡力解決這個問題。 – gphilip

+0

啊啊,我想我解決了這個問題,讓我的PHP工作人員監聽某些系統信號,然後一旦收到,就會在他們完成當前工作後終止。 Supervisord可以配置爲發送不同的信號進行處理,而不僅僅是Kill -9等效。 –

+0

這聽起來不錯。我會去那。謝謝! – gphilip