Я хочу использовать ActiveMQ в приложении Spring Boot в качестве встроенного сервера. Для настройки ActiveMQ я использовал следующее руководство: Spring Boot. Обмен сообщениями с помощью JMS. Мое приложение будет брокером и потребителем. Есть несколько потоков, создающих такие сообщения:
@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()
прокомментирован. Поэтому я ожидаю, что сообщение будет доставлено повторно после повторного запуска моего приложения. Однако этого не происходит.