我正在使用ActiveMQ来实现JMS系统。 我的第一个场景使用NOT事务处理会话正常工作,如下所示:
connection.createQueueSession(false, ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE);
之后,我需要一个重新发送系统,因此我已经读过,使用事务会话(http://activemq.apache.org/message-redelivery-and-dlq-handling.html)默认情况下重新发送选项有效,所以我更改了我的代码:
connection.createQueueSession(true, ActiveMQSession.SESSION_TRANSACTED);
我已经更改了send和onMessage方法。 两种方法共享相同的会话,因此方法如下:
SendMethod:
public static ObjectMessage createObjectMessageAndSendIt(Serializable toSend) throws JMSException {
ObjectMessage message = session.createObjectMessage();
message.setObject(toSend);
sender.send(message);
commitSession();
return message;
}
OnMessage方法:
public void onMessage(Message m) {
LOG.debug("IN onMessage message with ID [" + m.getJMSMessageID() + "]");
try {
if (m != null) {
if (m instanceof ObjectMessage) {
// do something
m.acknowledge();
JMSUtils.commitSession();
}
}
} catch (Exception e) {
// Rollback session because this message must be redelivered, it will be sent to DLQ
JMSUtils.rollbackSession();
}
LOG.debug("OUT onMessage message with ID [" + m.getJMSMessageID() + "]");
}
当我发送单个消息时,一切正常,但是当我开始大量发送消息时,尽管正确详细说明,但仍有一些消息留在队列中。这种情况导致,在服务器的新启动时,将再次详细说明此消息(我使用持久性进入KahaDB)。
你能告诉我为什么会出现这种奇怪的情况吗? 谢谢答案 0 :(得分:0)
使用相同的发件人和消费者会话的接缝会产生我的问题。 实际上,现在我尝试使用单独的会话
并且所有工作都是例外。
如果我做错了或您有其他建议请回复我。