使用故障转移传输进行代理故障转移后,JMS客户端无法建立连接

时间:2020-01-20 04:32:01

标签: spring spring-boot activemq spring-jms

根据https://activemq.apache.org/failover-transport-reference.html,我们根据语法在JmsListener中使用连接字符串,值是

 failover:(tcp://activemq-01:61616,tcp://activemq-02:61616)?randomize=false&maxReconnectDelay=3000&maxReconnectAttempts=50"

我们正在使用

 ActiveMQ : 5.14.5
 Spring : spring-boot-starter-activemq-2.2.0.RELEASE

我们的豆类定义如下

 @Bean
public ConnectionFactory connectionFactory() {

    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
    try {
        connectionFactory.setBrokerURL("failover:(tcp://activemq-01:61616,tcp://activemq-02:61616)?randomize=false&maxReconnectDelay=3000&maxReconnectAttempts=50");
        connectionFactory.setUserName("abcxyz");
        connectionFactory.setPassword("abcxyz");
    }catch(Exception e) {
        e.printStackTrace();
    }
    return connectionFactory;
}      

@Bean
public JmsListenerContainerFactory<?> topicListenerFactory(ConnectionFactory connectionFactory,
        DefaultJmsListenerContainerFactoryConfigurer configurer) {

    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setSubscriptionDurable(true);
    factory.setClientId("ClientID");
    configurer.configure(factory, connectionFactory);
    factory.setPubSubDomain(true);
    return factory;
}

因此,我试图拆除其中一个经纪人,并确认其他经纪人获得了锁并成为了主人。但是客户端仍在尝试连接到第一个代理并且失败。它从未能够获得与第二经纪人的联系。我注意到队列和主题侦听器都有类似的行为。

队列侦听器->

   @JmsListener(destination = "MYQUEUE")
   public void receiveMessageFromQueue(String message) {
         System.out.println("Message recv from queue ->" + message);
   }

主题侦听器->

   @JmsListener(destination = "MYTOPIC",containerFactory = "topicListenerFactory")
   public void receiveMessageFromQueue(String message) {
         System.out.println("Message recv from queue ->" + message);
   }

除了randomize之外,maxReconnectDelay,maxReconnectAttempts-是否还有其他选项可用于故障转移。

感谢您的帮助。

谢谢

0 个答案:

没有答案