2013-01-18 59 views
0

有什麼辦法,我可以做到這一點:製作的RabbitMQ等待消息的消費,然後引發異常

  • 寫一個消息隊列
  • 座生產者進程,直到有對其他消費者側
  • 如果10秒後沒有消費者,當達到10秒超時引發異常
  • 如果有消費,疏通生產者進程
  • 和ñ引發異常的製片方,該消息應保持在隊列中,讓消費者可以在以後使用它

我希望能夠在asynchrone的方式通知消費者。 直到現在我正在發送消息。我想知道是否有直接的消費者,但如果沒有,消息應該仍在隊列中。它似乎不是「直接」amqp的事情的行爲

回答

1

有趣的問題,不幸的是沒有一個優雅的解決方案。

從RabbitMQ的文檔中的「立即」標誌是這樣的:

這個標誌告訴服務器如何反應,如果該消息不能被立即傳送到一個隊列消費者。如果設置了此標誌,則服務器將使用Return方法返回無法傳遞的消息。如果此標誌爲零,服務器將對消息進行排隊,但不能保證它將被消耗。

你可以使用即時標誌,我想這樣的部分解決您的問題:

  • 當製片人準備排隊它與眼前的標誌觸發其關閉的消息設置

  • 如果返回該消息然後啓動定時器,並繼續重試10秒鐘的直接標誌設置

  • 如果tryi的10秒後如果它仍然沒有被拿起,那麼將它的立即標誌設置爲假(以便當消費者上線時你的消費者將會把它拿起)發佈它。