2015-08-20 3 views
0

Я хочу использовать ActiveMQ в приложении Spring Boot как встроенный сервер. Для настройки ActiveMQ я использовал следующий учебник: Spring Boot. Messaging with JMS. Мое приложение будет брокером и потребителем. Есть несколько потоков создания сообщений, как это:ActiveMQ с весной Boot. Настойчивость сообщений не работает

@Autowired 
private JmsTemplate jmsTemplate; 
....... 
MessageCreator messageCreator = session -> session.createObjectMessage(transactionNotificationData); 
         jmsTemplate.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE); 
         jmsTemplate.send(QUEUE, messageCreator); 

У меня есть еще один класс с следующим методом:

@JmsListener(destination = QUEUE) 
public void receive(Message message) throws IOException { 
    brokerService.getPersistenceAdapter(); 
    try { 
     if (message instanceof ObjectMessage) { 
      ObjectMessage objMessage = (ObjectMessage) message; 
      NotificationData notification = (NotificationData) objMessage.getObject(); 
      LOG.info("Received <" + notification.notification + ">"); 
      ...... do some stuff ........ 
//   message.acknowledge(); 
     } 
    } catch (JMSException e) { 
     e.printStackTrace(); 
    } 

Во время тестов я могу увидеть сообщения производятся и потребляются. Как видите, message.acknowledge() прокомментирован. Поэтому я ожидаю, что сообщение будет повторно отправлено после повторного запуска моего приложения. Однако этого не происходит.

ответ

2

Сообщение Квитирование автоматически обрабатываются контейнером и он выполняет после OnMessage() успешно выполняется, (получить() в вашем случае),

так что даже если вы комментируете message.acknowledge();, контейнер сам по себе посылает признание

вы можете посмотреть на следующую ссылку для получения дополнительной справки

Надеюсь, это поможет!

Удачи вам!

+0

@ Loco сделал это ответ на ваш вопрос? – Vihar

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