使用多兔子连接时,侦听器会无限重试

问题描述 投票:0回答:1

我正在使用 spring-multirabbit 配置与 2 个独立的rabbitmq 服务器的连接。

spring:
  multirabbitmq:
    enabled: true
    defaultConnection: first-connection
    connections:
      first-connection:
        host: localhost
        port: 5672
        username: guest
        password: guest
      second-connection:
        host: localhost
        port: 5672
        username: guest
        password: guest

对于本地测试,我将它们都放在本地主机上,但让我们假设它们是 2 个远程服务器。在默认连接上,我仅使用队列之间进行 1:1 通信的直接交换。在第二个连接上,我有一个主题交换、一个生产者和多个消费者。在第二个连接上,如果侦听器进入异常,则重试会无限进行。

我已经测试过,如果我删除多兔子配置并使用同一服务器进行直接交换和主题交换,我不会得到这种无限重试行为。它重试 3 次,这是通过属性配置的:

spring.rabbitmq.listener.simple.retry.enabled=true
spring.rabbitmq.listener.simple.retry.initial-interval=1000
spring.rabbitmq.listener.simple.retry.max-attempts=3

很明显,问题来自 multirabbitmq 库。有人有这方面的经验吗?如何覆盖/修复第二个连接上的重试行为?这是库中的已知错误吗?

我发现了这个 github 问题,但对建议的解决方案没有运气。

java spring rabbitmq spring-amqp multirabbitmq
1个回答
0
投票

根据当前代码库中的逻辑,我们无法为每个连接工厂进行重试配置:

   /**
     * Registers the ContainerFactory bean.
     */
    private SimpleRabbitListenerContainerFactory newContainerFactory(final ConnectionFactory connectionFactory) {
        final SimpleRabbitListenerContainerFactory containerFactory = new SimpleRabbitListenerContainerFactory();
        containerFactory.setConnectionFactory(connectionFactory);
        return containerFactory;
    }

因此,他们根据特定的连接工厂创建一个简单的

SimpleRabbitListenerContainerFactory
,但每个连接工厂都深入研究
RabbitProperties
的其余部分。

查看 Spring AMQP 中对 multi-rabbit 的一些官方支持:https://docs.spring.io/spring-amqp/docs/current/reference/html/#multi-rabbit

由于此功能没有干净、直接的自动配置,我建议您研究一下

setRetryTemplate()
中的
SimpleRabbitListenerContainerFactory
,您必须为每个连接工厂进行配置。

© www.soinside.com 2019 - 2024. All rights reserved.