【问题标题】:HornetQ clustered queue and failing node: are messages lost?HornetQ 集群队列和故障节点:消息是否丢失?
【发布时间】:2013-10-17 03:22:28
【问题描述】:

我正面临一个设计问题,我希望只有一个 JMS 生产者向两个消费者发送消息。只有两台服务器,生产者将开始生成消息,这些消息将被负载平衡(循环)给两个消费者。

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

它们会被重新分配给剩余的服务器,从而由剩余的消费者处理吗?否则他们会丢失?

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

我怎样才能实现设计,以免消息丢失?

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

【问题讨论】:

    标签: java hornetq


    【解决方案1】:

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

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

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

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

    所以,总而言之:

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

    【讨论】:

    • 太棒了!但是我不认为我们可以制作备份节点。另外,正如我提到的,我们丢失了日志文件。您认为将这些服务器放在 HA 中并在两台服务器中都有消费者是个好主意吗?它们与 JBoss 4.2.3 集成。
    • HornetQ 上 HA 中的服务器意味着备份。您可能对只有一个集群节点的 JBoss MQ 感到困惑。这不适用于企业消息传递,因为您实际上只有一个节点(所有内容都通过集群同步)
    • 是的,我的意思是 HA,但 HA 中只有两个节点,一个作为另一个节点的备份,而不是每个节点的备份。
    • 然后用两个消费者连接到活动节点。
    • 这正是我们所说的并置拓扑。
    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 2013-04-13
    • 2016-10-26
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多