首页 > 解决方案 > 故障转移时的 ActiveMQ MessageConsumer 行为

问题描述

我有一个应用程序,它在启动时注册 MessageConsumer 对象的静态列表,并在消息进入时在后台执行操作(通过 MessageListener 对象)。我想确保我的代码正确处理故障转移。如果发生故障转移,MessageConsumer 对象会自动转移到故障转移连接还是我需要重新创建消费者?这是代码的相关部分:

public class ActiveMQHandler {
    private final List<MessageConsumer> consumers = new ArrayList<>();
    private final Connection connection; 
    private final Session session;       

    public class ActiveMQHandler() {
         String url = "failover(ssl://...,ssl://...)";
         ActiveMQSslConnectionFactory factory = new ActiveMQSslConnectionFactory(url);
         connection = factory.createConnection();
         connection.start();
         session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         ...
         MessageConsumer consumer = session.createConsumer(...);
         consumer.setMessageListener(...); // will these still trigger after failover or do I need to recreate the consumer?
         consumers.add(consumer);
         ...
    }

    public void shutdown() {
         // close everything
         ...
     }
}

标签: javaactivemqfailover

解决方案


故障转移传输的重点是使过程尽可能透明,是的,如果您创建了消费者,那么故障转移传输将在重新连接时使用代理重新创建该资源。


推荐阅读