ActiveMQ stop consuming messages from specific broker

Viewed 25

I have 2 brokers (A and B) and 1 client, whereas client is consuming as non-durable.

My client consumes messages from broker A, if broker A shuts-down, the client switches to consuming messages from broker B. Once broker A starts again, the client goes back to consuming messages from it and stops the connection with broker B.

However, even after closing the connection with broker B I keep getting messages from it (which the client ignores), which causes high traffic and network loads.

  • I made sure the connection indeed closes.

broker session creation:

BrokerService broker = BrokerFactory.createBroker(..)
...    
broker.start();
ActiveMQConnectionFactory connectionFactory = ...
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createConnection(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer[] consumer = new MessageConsumer[MessageTopic.values().length];
for (MessageTopic topic : MessageTopic.values()) {
    consumer[topic.ordinal()] = session.createConsumer(session.createTopic(topic.name()));
    consumer[topic.ordinal()].setMessageListener(this);
}

client closing session with broker:

TopicSession session;
ActiveMQConnection connection;
Map<MessageTopic, MessageConsumer> topicConsumers;
...
@Override
public void close() {
    try {
        session.close();
    } catch (JMSException ex) {}
    finally {
        topicConsumers.clear();
        try {
            connection.stop();
        } catch (JMSException ex) {}
        finally {
            try {
                connection.close();
            } catch (JMSException ex){}
        }
    }
}
0 Answers
Related