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

How to pause @RabbitListener without destroying AnonymousQueue

我有一个 Spring 引导应用程序,它通常是消息驱动的,但在特殊情况下,需要停止传入的消息。但是我不能丢失这些消息,我需要缓冲它们并稍后以正确的顺序接收它们。

有无数关于通过 ListernerEndpointRegistry 停止监听器的问题,例如 here

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

有两种选择。

  1. 不要使用匿名(自动删除)队列并使用 stop/start。
  2. 不要停止容器;当您想暂停消息传递时,只需阻塞侦听器线程,并在您想要重新启动时唤醒它们。

However I cannot lose those messages

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