根据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-是否还有其他选项可用于故障转移。
感谢您的帮助。
谢谢