Я думаю, что вы хотите слушать новых производителей и потребителей в определенном месте назначения (определенной очереди или теме). Это верно?
Вы можете создавать экземпляры ConsumerEventSource и ProducerEventSource и регистрировать своих собственных слушателей, вызывая их setConsumerListener и setProducerListener для них соответственно.
Итак:
Connection conn = yourconnection; // the connection your listener will use
Destination dest = yourdestination; // the destination you're paying attention to
ConsumerEventSource source = new ConsumerEventSource(conn, dest);
source.setConsumerListener(new ConsumerListener() {
public void onConsumerEvent(ConsumerEvent event) {
if (event.isStarted()) {
System.out.println("a new consumer has started - " + event.getConsumerId());
} else {
System.out.println("a consumer has dropped - " + event.getConsumerId());
}
}
});
Если вы посмотрите на код для ConsumerEventSource или ProducerEventSource, вы увидите, что это простые объекты, использующие методы AdvisorySupport для прослушивания специальной консультативной темы, целью которой является трансляция новостей о производителях и потребителях. Вы можете узнать больше, прочитав исходный код этих классов.
Ваше использование «соединения» потенциально является проблемой; в земле ActiveMQ (которая является подмножеством земли JMS) «Соединение» - это объект более низкого уровня, который не связан с конкретным пунктом назначения. Определенный клиент создает «Сеанс» из Соединения - все еще не специфичный для пункта назначения - и затем создает для определенного пункта назначения QueueSender, QueueReceiver, TopicPublisher или TopicSubscriber. Когда они созданы или когда сеансы, которые их создали, умирают, это те события, о которых вы хотите услышать, и о которых вы услышите, если будете использовать код выше.