【问题标题】:RabbitMQ postponed receiveRabbitMQ 延迟接收
【发布时间】:2019-11-13 12:02:22
【问题描述】:

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

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

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

我怎样才能做到这一点?使用 @RabbitListener(queues = {queue1,queue2}) 立即开始监听。

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

感谢您的帮助。

【问题讨论】:

    标签: java spring rabbitmq spring-amqp


    【解决方案1】:

    @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 "";
    

    我想你最好有两个独立的@RabbitListeners:一个用于配置队列,另一个用于非自动启动。配置完成后,您需要从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

    【讨论】:

    • 谢谢,这正是我要找的。​​span>
    猜你喜欢
    • 2020-09-20
    • 2013-03-13
    • 2011-05-25
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多