0

我有 2 台服务器 server1 和 server2。server1 是主服务器,server2 是从属服务器。两者都在集群环境中运行。

如果具有相同组 ID 的 2 条消息同时到达节点 1 和节点 2,它们将不知道应该将消息发送给哪个消费者。因此,消息最终会被不同的消费者处理,有时首先到达的消息会被稍后处理,这是不可取的。

我想配置系统,以便两个节点彼此知道消息应该由哪个消费者处理。

我试过的解决方案: 用组处理程序 LOCAL 配置 server1,用 REMOTE 配置 server2。现在,每当消息到达时,本地组处理程序都会识别消费者在哪个节点上,并相应地选择消息。

此解决方案在 server1 运行正常之前有效。但是,如果 server1 出现故障,则不会再处理消息。

为了解决这个问题,我将备份服务器添加到 server1 到 server2 的消息传递子系统活动 mq 中,并且对 server2 进行了同样的操作。

/profile=garima/subsystem=messaging-activemq/server=backup:add

并将相同的集群连接、发现组、http-connector、广播组添加到此备份服务器,但是当我尝试此解决方案时,似乎无法修复故障转移条件,并且消息未在其他节点上处理。

请提出任何其他方法或如何配置具有 LOCAL 组处理程序的服务器停止的场景。

4

1 回答 1

0

集群分组的推荐解决方案是您配置的 - 使用LOCAL分组处理程序的节点备份。这里的底线是,如果集群中没有具有 LOCAL 分组处理程序的活动节点,那么根本无法决定哪个消费者应该处理哪个组。在我看来,您的备份代理根本没有按预期工作(这可能是另一个问题的主题)。

除了备份之外,您还可以考虑完全消除集群。集群是一种使用水平扩展来提高整体消息吞吐量的方法。但是,消息分组自然会序列化每个组的消息消耗,这会降低整体消息吞吐量(可能严重取决于用例)。由于您正在对消息进行分组,因此您可能不需要集群的性能可伸缩性。您是否执行过任何基准测试来确定您的性能瓶颈?如果是这样,集群是否是解决这些瓶颈的行之有效的解决方案?

于 2019-11-08T15:59:04.523 回答