我想在Spring Boot应用程序中使用ActiveMQ作为嵌入式服务器。要设置ActiveMQ我使用了以下教程:Spring Boot. Messaging with 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()
已被评论。所以我希望在重新运行我的应用程序后重新传递该消息。然而,它并没有发生。
答案 0 :(得分:2)
消息确认由容器自动处理,并在成功执行onMessage()后执行(在您的情况下为receive()),
所以即使你评论message.acknowledge();
,容器也会发送确认
您可以查看以下链接以获取更多参考资料
希望这有帮助!
祝你好运!