首页 文章

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

提问于
浏览
0

我想在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 回答

  • 2

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

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

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

    希望这可以帮助!

    祝好运!

相关问题