0

我想在 Spring Boot 应用程序中使用 ActiveMQ 作为嵌入式服务器。为了设置 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(),已评论。所以我希望在重新运行我的应用程序后重新发送消息。然而它不会发生。

4

1 回答 1

2

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

因此,即使您发表评论message.acknowledge();,容器也会自行发送确认

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

希望这可以帮助!

祝你好运!

于 2015-08-20T09:30:35.767 回答