如果在 RPC RabbitMQ 中删除队列,如何重新声明队列



我正在使用 java 客户端

https://www.rabbitmq.com/tutorials/tutorial-six-java.html

.我的设置是RPC。我的服务器正在创建队列,客户端也在创建相同的队列并发送消息。接收消息后,服务器正在执行一些操作并将结果发送回客户端。

现在,如果服务器创建了队列并在队列因某种原因被删除时与之连接。服务器不会引发任何异常,当客户端创建相同的队列并放置消息时,服务器也不会收到这些消息,因为它没有连接。

服务器如何知道队列被删除?

非常感谢

听起来正在发生以下情况:

  1. 队列 A 已创建。
  2. 使用者 1 订阅队列 A
  3. 队列 A 被删除,而使用者 1 仍处于活动状态
  4. 重新创建队列 A(称为 A')

现在,您想知道为什么消费者 1 没有收到任何消息?您必须重新订阅您的消费者。我通常不会删除队列,因为在任何合理的情况下都不需要这样做(相反,使用 queue.expires 属性来处理队列的自动删除)。

根据 AMQP 0-9-1 规范,

删除队列时,任何挂起的消息都将发送到死信 队列(如果在服务器配置中定义),以及所有 队列中的使用者将被取消。

因此,根据行为的描述,这是消费者的错误。在这种情况下,它应该引发异常或以其他方式退出消费循环。无论如何,您必须先重新订阅 A',然后才能收到更多消息。

最新更新