Spring Amqp - 是否可以在 basicGet() 之前挂接自定义处理程序?

Spring Amqp - Is it possible to hook a custom handler before a basicGet()?

我有一个用 @RabbitHandler 注释的消息处理程序,它从队列中拾取和处理消息。

用例

在部署期间,实例不应从队列中选取任何消息。有什么地方可以挂钩并检查我的实例是否被阻止(从数据库读取以检查)并停止接收消息。我检查了我们是否有 setAfterReceivePostProcessors 但我实际上正在寻找的是 beforeReceiveProcessor 之类的东西来解决我检查而不是轮询的用例。它根本不应该达到我的 @RabbitHandler 方法。有没有可能达到这种程度的控制?

如果没有,唯一可能的方法是编写自定义轮询器吗?

@RabbitListener 背后的基础设施使用 basicConsume(),而不是 basicGet()

您可以使用 RabbitListenerEndpointRegistry bean 控制侦听器容器的生命周期。

@RabbitListener(id = "foo", ..., autoStartup = "false")

然后

registry.getListenerContainer("foo").start();

您也可以使用 属性 占位符。

@RabbitListener(id = "foo", ..., autoStartup = "${should.start:false}")