Hornetq是否已恢复已发送的消息?

时间:2014-08-08 13:03:03

标签: jboss jms hornetq

相当不言自明的问题:似乎Jboss 7的嵌入式HornetQ尝试恢复已处理消息的事务。可能是这样吗?如果是这样,它是否在以后的版本中修复(Jboss 7使用HornetQ 2.2)?

1 个答案:

答案 0 :(得分:0)

HornetQ(以及所有消息系统实现JMS或AMQP)将重新传递未确认的消息。如果服务器交付了它,但您从未对其进行过确认..服务器将在您重新创建消费者后立即重新发送消息(在客户端发生故障或服务器崩溃后)。

我不确定你的意思是“HornetQ尝试恢复已处理邮件的交易。”所以我将解释一些TX语义。

如果您打开一个交易,则会将消息作为该交易的一部分进行处理。如果该TX提交确认了ack,则该消息将从服务器中删除。

如果准备好TX(从未提交),服务器将保留这些消息,直到服务器决定如何处理TX。 (从事务管理器恢复过程)。

因此,答案的关键是确认与交付。

使用hornetQ专门有一个确认模式调用Pre-ACK,消息一发送到您的客户端就会离开服务器。您可以尝试这一点,但在硬件故障后永远不会重新传递消息,因此在做出决定之前要小心并研究它正在做什么。