使RabbitMQ等待消息使用,然后引发异常

使RabbitMQ等待消息使用,然后引发异常,rabbitmq,Rabbitmq,我有没有办法做到这一点: 将消息写入队列 阻止生产者进程,直到另一侧有消费者 如果10秒后没有消费者,则引发异常 如果存在使用者,请取消阻止生产者进程 当达到10秒超时并且在生产者端引发异常时,该消息应保留在队列中,以便消费者以后可以使用它 我希望能够以异步方式通知消费者。 到现在为止,我都在发信息。我想知道是否有直接消费者,但如果没有,消息应该仍然在队列中。这似乎不是“立即”amqp事件的行为,这是一个有趣的问题,不幸的是,没有一个优雅的解决方案 从RabbitMQ文档中,“立即”标志的工

我有没有办法做到这一点:

  • 将消息写入队列
  • 阻止生产者进程,直到另一侧有消费者
  • 如果10秒后没有消费者,则引发异常
  • 如果存在使用者,请取消阻止生产者进程
  • 当达到10秒超时并且在生产者端引发异常时,该消息应保留在队列中,以便消费者以后可以使用它
我希望能够以异步方式通知消费者。
到现在为止,我都在发信息。我想知道是否有直接消费者,但如果没有,消息应该仍然在队列中。这似乎不是“立即”amqp事件的行为,这是一个有趣的问题,不幸的是,没有一个优雅的解决方案

从RabbitMQ文档中,“立即”标志的工作方式如下:

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

您可以使用即时标志部分解决您的问题,我的想法如下:

  • 当生产者准备对消息进行排队时,它会使用设置的立即标志将其触发

  • 如果返回消息,则启动计时器并在设置立即标志的情况下继续重试10秒钟

  • 如果在尝试10秒后仍无法提取,则发布时立即标记设置为false(以便消费者在线时提取)


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

      从RabbitMQ文档中,“立即”标志的工作方式如下:

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

      您可以使用即时标志部分解决您的问题,我的想法如下:

      • 当生产者准备对消息进行排队时,它会使用设置的立即标志将其触发

      • 如果返回消息,则启动计时器并在设置立即标志的情况下继续重试10秒钟

      • 如果在尝试10秒后仍无法提取,则发布时立即标记设置为false(以便消费者在线时提取)


      对于记录,立即标志不再存在。我的连接器版本:amqp-client-5.1.2对于记录,立即标志不再存在。我的连接器版本:amqp-client-5.1.2