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

时间:2018-01-31 15:58:13

标签: rabbitmq rpc spring-rabbitmq

我正在使用

的java客户端



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




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

现在,如果服务器创建队列并连接它,同时由于某种原因删除了队列。服务器没有抛出任何异常,当客户端创建相同的队列并且放置消息时,服务器没有收到这些消息,因为它没有连接。

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

非常感谢

1 个答案:

答案 0 :(得分:1)

听起来好像发生了以下情况:

  1. 创建了队列A.
  2. 消费者1订阅队列A
  3. 在消费者1仍处于活动状态时删除队列A
  4. 重新创建队列A(称之为A')
  5. 现在,您想知道为什么消费者1没有收到任何消息?您必须重新订阅您的消费者。我通常不删除队列,因为在任何合理的情况下都不需要这样做(相反,使用queue.expires属性来处理队列的自动删除。)

    根据AMQP 0-9-1 Specification

      

    删除队列时,任何待处理的消息都会发送到死信   如果在服务器配置中定义了此队列,则为队列   队列中的消费者被取消了。

    因此,根据行为描述,这是消费者的错误。在这种情况下,它应抛出异常或以其他方式退出使用循环。无论如何,在您收到更多邮件之前,您必须重新订阅A'。