2013-01-18 27 views
0

有什么办法,我可以做到这一点:制作的RabbitMQ等待消息的消费,然后引发异常

  • 写一个消息队列
  • 座生产者进程,直到有对其他消费者侧
  • 如果10秒后没有消费者,当达到10秒超时引发异常
  • 如果有消费,疏通生产者进程
  • 和ñ引发异常的制片方,该消息应保持在队列中,让消费者可以在以后使用它

我希望能够在asynchrone的方式通知消费者。 直到现在我正在发送消息。我想知道是否有直接的消费者,但如果没有,消息应该仍在队列中。它似乎不是“直接”amqp的事情的行为

回答

1

有趣的问题,不幸的是没有一个优雅的解决方案。

从RabbitMQ的文档中的“立即”标志是这样的:

这个标志告诉服务器如何反应,如果该消息不能被立即传送到一个队列消费者。如果设置了此标志,则服务器将使用Return方法返回无法传递的消息。如果此标志为零,服务器将对消息进行排队,但不能保证它将被消耗。

你可以使用即时标志,我想这样的部分解决您的问题:

  • 当制片人准备排队它与眼前的标志触发其关闭的消息设置

  • 如果返回该消息然后启动定时器,并继续重试10秒钟的直接标志设置

  • 如果tryi的10秒后如果它仍然没有被拿起,那么将它的立即标志设置为假(以便当消费者上线时你的消费者将会把它拿起)发布它。