2016-09-20 7 views
1

Я планирую сервис «осведомленный о потребителе», который будет обрабатывать информацию определенного типа, только если в этой теме есть хотя бы один потребитель. Используя весной, я был в состоянии создать следующий код для отслеживания, когда потребители подключать или отключать от темы:Используя ActiveMQ, можно заставить брокера повторно отправить консультативные сообщения?

@JmsListener(destination = "ActiveMQ.Advisory.Consumer.>") 
public void processaConsumidorConectado(Message message){ 
    System.out.println("Registrou um consumidor"); 
} 

Это работает очень хорошо, если событие происходит после того, как зарегистрироваться в эту тему. Но может случиться так, что у меня уже есть потребитель в теме, прежде чем я зарегистрирую этого слушателя.

Есть ли способ заставить activeMQ отправлять все консультативные сообщения по теме или что-то в этом роде?

ответ

1

Я думаю, что это возможно с ретроактивными потребителями, но я не тестировал это или с дублированием сообщений на другую тему по верблюжьему маршруту. я не знаю, если это соответствует вашим beeds, но вы можете подписаться на

ActiveMQ.Advisory.NoConsumer.Topic.YourTopic 

Если вы получите сообщение по этой теме это означает, что не потребители подключены

http://activemq.apache.org/retroactive-consumer.html

+0

Спасибо! Я буду тестировать и отвечать здесь, если он работает. –

+0

. Вы можете отправить тестовое сообщение в свою тему, и перед этим прослушивать «ActiveMQ.Advisory.NoConsumer.Topic.YourTopic», если сообщения не являются постоянными, и если нет подключенных потребителей, вы будете получите ваше сообщение @ NoConsumers topic –

1
  1. Tracking активные подписчики через советы будут довольно шелушатся. Вы, вероятно, должны просто подключиться к JMX и посмотреть, есть ли активный потребитель или нет.

  2. Вы можете добавить подписку на консультативную тему, которую вы хотите, или использовать джокер, чтобы соответствовать шаблону группы, таким как тема:. //ActiveMQ.Advisory.Consumer>

Дружественные отказ от ответственности - В общем, проектирование для отправки сообщения только в том случае, если потребитель существует, является условием гонки, и я бы вообще советовал ему ... существует риск, что потребитель уйдет сразу после отправки.

Редактировать: Правильно # 2, чтобы отразить прочную подписку, недоступно для консультативных тем

+0

Возможно ли это ** продление подписки на консультацию ** –

+0

Да. Консультационные темы - это просто нормальные темы. Как обычно, создайте прочную подписку. –

+0

Я удалил это из своего ответа, потому что я никогда не тестировал это и не видел этот пост, возможно, эта функция добавлена ​​после http://stackoverflow.com/questions/17488272/activemq-how-to-create-subscriber-for-activemq-advisory- connection-topic –