如何在不破坏AnonymousQueue的情况下暂停@RabbitListener

时间:2019-10-31 12:26:48

标签: spring spring-boot rabbitmq spring-amqp

我有一个Spring Boot应用程序,该应用程序通常是消息驱动的,但是在特殊情况下,需要停止传入的消息。但是,我无法松开这些消息,我需要对其进行缓冲,然后以正确的顺序接收它们。

关于通过ListernerEndpointRegistry停止侦听器(例如here),存在许多问题被回答。

但是,当我停止容器时,AnonymousQueue似乎消失了。当我重新启动时,我希望队列保留在交换机上并缓冲所有消息,并接收它们。这是可能的还是我需要在应用程序内部缓冲它们?

1 个答案:

答案 0 :(得分:1)

有两个选项。

  1. 请勿使用匿名(自动删除)队列,而应使用停止/启动。
  2. 不要停止容器;只需在要暂停消息传递时阻止侦听器线程,并在要重新启动时唤醒它们即可。
  

但是我不能丢失那些消息

如果您不能丢失消息,则永远不要使用自动删除队列-如果您遇到简单的网络故障,就可以随时丢失消息。