使RabbitMQ等待消息使用,然后引发异常
我有没有办法做到这一点:使RabbitMQ等待消息使用,然后引发异常,rabbitmq,Rabbitmq,我有没有办法做到这一点: 将消息写入队列 阻止生产者进程,直到另一侧有消费者 如果10秒后没有消费者,则引发异常 如果存在使用者,请取消阻止生产者进程 当达到10秒超时并且在生产者端引发异常时,该消息应保留在队列中,以便消费者以后可以使用它 我希望能够以异步方式通知消费者。 到现在为止,我都在发信息。我想知道是否有直接消费者,但如果没有,消息应该仍然在队列中。这似乎不是“立即”amqp事件的行为,这是一个有趣的问题,不幸的是,没有一个优雅的解决方案 从RabbitMQ文档中,“立即”标志的工
- 将消息写入队列
- 阻止生产者进程,直到另一侧有消费者
- 如果10秒后没有消费者,则引发异常
- 如果存在使用者,请取消阻止生产者进程
- 当达到10秒超时并且在生产者端引发异常时,该消息应保留在队列中,以便消费者以后可以使用它
到现在为止,我都在发信息。我想知道是否有直接消费者,但如果没有,消息应该仍然在队列中。这似乎不是“立即”amqp事件的行为,这是一个有趣的问题,不幸的是,没有一个优雅的解决方案 从RabbitMQ文档中,“立即”标志的工作方式如下: 此标志告诉服务器,如果消息无法立即路由到队列使用者,该如何反应。如果设置了此标志,服务器将使用返回方法返回无法传递的消息。如果此标志为零,服务器将对消息进行排队,但不能保证消息会被使用 您可以使用即时标志部分解决您的问题,我的想法如下:
- 当生产者准备对消息进行排队时,它会使用设置的立即标志将其触发
- 如果返回消息,则启动计时器并在设置立即标志的情况下继续重试10秒钟
- 如果在尝试10秒后仍无法提取,则发布时立即标记设置为false(以便消费者在线时提取)
- 当生产者准备对消息进行排队时,它会使用设置的立即标志将其触发
- 如果返回消息,则启动计时器并在设置立即标志的情况下继续重试10秒钟
- 如果在尝试10秒后仍无法提取,则发布时立即标记设置为false(以便消费者在线时提取)
- 有趣的问题,不幸的是,没有一个优雅的解决方案
从RabbitMQ文档中,“立即”标志的工作方式如下:
此标志告诉服务器,如果消息无法立即路由到队列使用者,该如何反应。如果设置了此标志,服务器将使用返回方法返回无法传递的消息。如果此标志为零,服务器将对消息进行排队,但不能保证消息会被使用
您可以使用即时标志部分解决您的问题,我的想法如下: