我有什么办法可以做到这一点:
我希望能够以异步方式通知消费者。 到现在为止,我正在发送消息。我想知道是否有直接消费者,但如果没有,消息仍然应该在队列中。它似乎不是“直接”amqp事物的行为
答案 0 :(得分:1)
有趣的问题,遗憾的是没有一个优雅的解决方案。
从RabbitMQ文档中,“立即”标志的工作原理如下:
如果消息无法立即路由到队列使用者,则此标志告诉服务器如何做出反应。如果设置了此标志,则服务器将返回带有Return方法的无法传递的消息。如果此标志为零,则服务器将对消息进行排队,但不保证它将被消耗。
你可以使用立即标志部分解决你的问题,我在想这样的事情:
当制作人准备好对消息进行排队时,会使用立即标志设置将其触发
如果返回消息,则启动计时器并在设置立即标志的情况下继续重试10秒
如果尝试10秒后仍然无法获取,则将立即标志设置为false发布(以便消费者在消费者上线时将其接收)