为什么在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
答案 0 :(得分:1)
在此上下文中,消息侦听器容器是客户端,而不是侦听器。
如果您希望手动确认(可能在收到许多消息后),请不要使用侦听器容器;您可以将JmsTemplate.execute()
与SessionCallback
一起使用,并创建自己的消费者。