HornetQ集群队列和故障节点:消息丢失



>我面临着一个设计问题,我希望只有一个JMS生产者向两个消费者发送消息。只有两台服务器,生产者将开始生成消息,这些消息将对两个使用者进行负载平衡(使用轮循机制)。

在一台服务器发生故障的假设情况下,我确实有一种机制,因此将在其余服务器中激活新的生产者。但是,在服务器中处理的消息出现故障会发生什么情况?

它们是否会被重新分配给剩余的服务器,从而由剩余的使用者处理?或者它们会丢失?

如果最后一种情况为真,就会有另一个问题。生产者根据 NAS 中的文件创建消息,因此当服务器出现故障时,新激活的生产者将开始根据 NAS 的内容创建消息,这可能会复制消息(但这种情况已处理)问题是,如果出现故障的服务器不是具有活动生产者的服务器,那么当服务器再次启动时,它将没有可供使用的消息,并且没有消息会替换丢失的消息。

如何实现设计,以便不会丢失任何消息?

注意:当一台服务器出现故障时,日志和绑定将丢失。

一旦消息被传输到特定节点,它就属于该节点。

如果节点出现故障,则必须使用其日志激活该节点,并且消息状态将从磁盘中恢复。如果您没有更多的使用者,您最终可能会重新分发消息(当然,这将取决于重新分发配置)。

或者最好的方法是为每个节点创建一个备份节点。

我们一直建议使用并置拓扑,其中一个 VM 具有活动实例和另一个服务器的备份实例......这样,每个活动服务器也将有一个备份配置。正如我们所说,这在 2.4.0 上得到了改进,因为您目前需要大量手动配置。

因此,总而言之:

  • 重启节点
  • 配置备份节点

相关内容

最新更新