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){}
}
}
}