2016-03-16 1 views
0

Я использую версию весной загрузки 1.3.2. Я использую @JmsListener для использования сообщения от activemq для сообщения, которое я создал/создал с помощью JmsTemplate. Вот код:Как приостановить и начать использовать сообщение с помощью @JmsListener

@JmsListener(destination = "myqueue") 
public void consumeMsg(Object requestBody) 
    try { 
     javaMailSender.send(requestBody); 
    } catch (MailException ex) { 
     LOG.error(ex.getLocalizedMessage(), ex); 
     if(ex.getMessage().contains(SMTP_CONNECTION_FAILURE) && activeMqMsg.getIntProperty("RETRYCOUNT") == 1) { 
      producer.send("myqueue",requestBody) 
     } 
     else { 
      producer.send("manualqueue",requestBody) 
     } 
    } 
} 

теперь, когда есть ошибка Сбой подключения из SMTP, я хочу, чтобы приостановить @JmsListener на некоторое время и снова начать потреблять сообщение. Я не видел лучшего примера для этого варианта использования, используя @JmsListener. Поскольку я использую весеннюю загрузку, я добавил параметры подключения activemq в свойствах приложения, мне не нужно писать какой-либо код для создания фабрики соединений, установки очереди ... и т. Д. Вы можете помочь, как это сделать?

+0

вот что вам нужно: http://stackoverflow.com/questions/32588352/how-can-i-stop-start-pause-a-jmslistener-the-clean-way/33214651#33214651 – Seb

ответ

1

Получить ссылку на фасоль JmsListenerEndpointRegistry (например, @Autowire) и позвонить по телефону stop() - это остановит всех слушателей. start() запустит всех слушателей.

Если у вас несколько слушателей и только хотите остановить 1, укажите атрибут id и используйте registry.getListenerContainer(id), затем остановите/запустите сам контейнер.

+0

Спасибо за обновление , – bhasky

Смежные вопросы