为什么JMS消息会自动得到确认

时间:2016-03-03 13:30:00

标签: java jms spring-jms

为什么在onMessage()侦听器方法返回后,即使确认模式设置为CLIENT_ACKNOWLEDGE,JMS消息也会被确认?

如果您查看commitIfNecessary课程中的AbstractMessageListenerContainer方法,可以看到以下内容:

protected void commitIfNecessary(Session session, Message message) throws JMSException {
    // Commit session or acknowledge message.
    if (session.getTransacted()) {
        // Commit necessary - but avoid commit call within a JTA transaction.
        if (isSessionLocallyTransacted(session)) {
            // Transacted session created by this container -> commit.
            JmsUtils.commitIfNecessary(session);
        }
    } else if (message != null && isClientAcknowledge(session)) {
        message.acknowledge();
    }
}

调试后,我确认已调用message.acknowledge()

我认为CLIENT_ACKNOWLEDGE意味着我需要手动确认消息?

有什么想法吗?

谢谢,Mickael

1 个答案:

答案 0 :(得分:1)

在此上下文中,消息侦听器容器是客户端,而不是侦听器。

如果您希望手动确认(可能在收到许多消息后),请不要使用侦听器容器;您可以将JmsTemplate.execute()SessionCallback一起使用,并创建自己的消费者。