2012-11-05 603 views
7

我希望消費者每次收到消息時都執行一些操作。消費者必須全天候地「聆聽」隊列,還是隻能在收到適當的消息時才運行?RabbitMQ消費者點播?

回答

2

我不確定你的問題是否合理。消息只能由隊列的消費者從隊列中接收。要知道消息是否在隊列中,必須查看隊列。做到這一點的唯一方法就是成爲消費者。

如果您確實希望可以有一個運行管理插件的命令行界面的腳本。這可以輪詢隊列,當它的大小超過一個時,可以啓動一個程序來運行消費者從隊列中消費。

這沒有任何意義。如果它只是坐在等待隊列,別的什麼都不做,它幾乎不會消耗任何資源,所以我沒有看到什麼問題會一天24小時運行消費者。

當然,消費者不必24/7運行,這就是MQ的一部分。它是異步的。當生產者寫入隊列時,消費者不必運行。因此,您可以定期執行一項計劃任務來運行您的客戶,以檢查和處理隊列中的消息。但我不認爲這是你想要的。

整個聆聽點是:在信息出現之前不做任何事情,處理信息,直到下一條信息才做。這就是你想要的問題的第一句話。爲什麼聽力問題?

+0

我想這沒有問題。我只是問,因爲我只是在學習,我不知道一個正在傾聽的流程是否會消耗大量的資源。非常感謝您的回覆 – vicmarq

+0

基本上沒有,它不應該消耗太多的資源。如果你想立即使用消息,你確實需要一個正在運行的進程,儘管 – robthewolf

+0

有些人告訴我不要在這些長時間運行的進程中使用PHP。你怎麼看待這件事? – vicmarq