2013-08-29 53 views
1

我對使用RabbitMQ作爲消息排隊協議頗爲陌生。我已經爲RabbitMQ教程中的發送者和消費者工作隊列編寫了代碼。RabbitMQ工作隊列:在發件人之後啓動消費者[Java]

[鏈接:http://www.rabbitmq.com/tutorials/tutorial-two-java.html]

上述事情能正常工作,當我們開始發送前的消費者。 但是,如果我們在運行發件人後啓動消費者,則會出現問題。 運行發件人後,啓動 的消費者沒有消費任何消息。 在研究了RabbitMQ和AMQP相關事物的架構之後,似乎相當困難。

1]是否有可能,我們啓動發件人和消費者之後,發件人收到隊列中的消息後啓動消費者?

2]如果是。那麼這個東西是如何完成的。是否有一些技術可以做同樣的事情?

回答

2

是的,這是可能的。確保您的隊列聲明爲自動刪除設置爲false。一旦最後一位消費者取消訂閱,如果自動刪除設置爲true,則該隊列將被刪除,並且當您的發件人推送消息時,它們將丟失。如果自動刪除設置爲false,則在消費者取消訂閱後,隊列將繼續存在,並且您的發件人將能夠將消息推送到隊列中而不會丟失。

查找有關排長龍http://www.rabbitmq.com/tutorials/amqp-concepts.html#queues

1

我在第一種情況下假設的詳細信息(第一起消費者),消費者正確創建/註冊就是了偵聽的RabbitMQ服務器上的隊列。所以當發件人發送它能夠接收它。

在第二種情況下,可能發生了什麼是發送者試圖發送到不存在/未創建的隊列,並進入默認/死信。

我建議你可以打開RabbitMQ管理控制檯,看看隊列是否正確創建。