gpt4 book ai didi

java - RabbitMQ 推迟接收

转载 作者:行者123 更新时间:2023-11-30 01:48:43 24 4
gpt4 key购买 nike

是否可以以某种方式推迟从 spring-amqp 中某个特定队列监听消息?

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

我的服务在启动时通过第一个队列接收配置并配置自身。只有在该配置之后,才允许处理第二个队列中的“标准”作业 - 而不是之前。

我怎样才能实现这个目标?使用 @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()。您还可以在第二个 @RabbitListener 上配置 id:

/**
* 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com