【问题标题】:Make RabbitMQ wait for message consumption, and then raise exception让 RabbitMQ 等待消息消费,然后引发异常
【发布时间】:2013-01-18 18:07:54
【问题描述】:

有什么办法可以做到这一点:

  • 将消息写入队列
  • 阻塞生产者进程,直到另一端有消费者
  • 如果 10 秒后没有消费者,则引发异常
  • 如果有消费者,解封生产者进程
  • 当达到 10 秒超时并在生产者端引发异常时,应将消息保留在队列中,以便消费者稍后使用它

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

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

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

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

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

    您可以使用立即标志部分解决您的问题,我在想这样的事情:

    • 当生产者准备好将消息排队时,它会使用立即标志设置来触发它

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

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

    【讨论】:

    • 对于记录,立即标志不再存在。我的连接器版本:amqp-client-5.1.2
    猜你喜欢
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    相关资源
    最近更新 更多