是否有可能以某种方式推迟来自spring-amqp中某个特定队列的侦听消息?

在我的用例中,我有一个必须在两个RabbitMQ队列上侦听消息的服务。第一个专用于此服务,第二个用于我的服务的多个实例(在不同的计算机上运行)用于负载均衡作业。

我在statup上的服务通过第一个队列接收配置并自行配置。只有在完成该配置后,才可以处理第二个队列中的“标准”作业,而不是之前。

我该如何实现?使用@RabbitListener(queues = {queue1,queue2})立即开始监听。

我也查看了rabbitmq_delayed_message_exchange,但这不是我想要的,因为它会延迟消息的处理。我不想延迟处理(其他已经配置的使用者可以处理工作)。

感谢您的任何帮助。

最佳答案

@RabbitListener具有autoStartup选项:

/**
 * Set to true or false, to override the default setting in the container factory.
 * @return true to auto start, false to not auto start.
 * @since 2.0
 */
String autoStartup() default "";


我想最好有两个单独的@RabbitListener:一个用于配置队列,另一个不自动启动。准备好配置后,您需要从RabbitListenerEndpointRegistry.getListenerContainer()获取第二个容器,并调用其start()。您还可以在第二个id上配置@RabbitListener

/**
 * The unique identifier of the container managing for this endpoint.
 * <p>If none is specified an auto-generated one is provided.
 * @return the {@code id} for the container managing for this endpoint.
 * @see org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry#getListenerContainer(String)
 */
String id() default "";


请参阅文档以获取更多信息:https://docs.spring.io/spring-amqp/docs/2.1.7.RELEASE/reference/html/#async-annotation-driven

关于java - RabbitMQ推迟接收,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56859242/

10-09 18:21