带有Spring Boot的ActiveMQ。消息持久性不起作用

时间:2015-08-20 09:12:14

标签: java spring-boot activemq jmstemplate

我想在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()已被评论。所以我希望在重新运行我的应用程序后重新传递该消息。然而,它并没有发生。

1 个答案:

答案 0 :(得分:2)

消息确认由容器自动处理,并在成功执行onMessage()后执行(在您的情况下为receive()),

所以即使你评论message.acknowledge();,容器也会发送确认

您可以查看以下链接以获取更多参考资料

希望这有帮助!

祝你好运!