1

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

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

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

4

1 回答 1

1

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

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

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

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

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

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

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

于 2013-01-22T16:44:58.290 回答