相当不言自明的问题:似乎Jboss 7的嵌入式HornetQ尝试恢复已处理消息的事务。可能是这样吗?如果是这样,它是否在以后的版本中修复(Jboss 7使用HornetQ 2.2)?
答案 0 :(得分:0)
HornetQ(以及所有消息系统实现JMS或AMQP)将重新传递未确认的消息。如果服务器交付了它,但您从未对其进行过确认..服务器将在您重新创建消费者后立即重新发送消息(在客户端发生故障或服务器崩溃后)。
我不确定你的意思是“HornetQ尝试恢复已处理邮件的交易。”所以我将解释一些TX语义。
如果您打开一个交易,则会将消息作为该交易的一部分进行处理。如果该TX提交确认了ack,则该消息将从服务器中删除。
如果准备好TX(从未提交),服务器将保留这些消息,直到服务器决定如何处理TX。 (从事务管理器恢复过程)。
因此,答案的关键是确认与交付。
使用hornetQ专门有一个确认模式调用Pre-ACK,消息一发送到您的客户端就会离开服务器。您可以尝试这一点,但在硬件故障后永远不会重新传递消息,因此在做出决定之前要小心并研究它正在做什么。