我有两个服务器server1和server2。server1是主服务器,server2是从服务器。两者都在集群环境中运行。
如果两条具有相同组ID的消息同时到达节点1和节点2,他们将不知道该消息应该发送给哪个消费者。因此,该消息最终由不同的消费者处理,有时最先到达的消息会在稍后处理,这是不可取的。
我想配置系统,使两个节点都知道消息应由哪个消费者处理。
我尝试过的解决方案:使用组处理程序LOCAL配置服务器1,使用REMOTE配置服务器2。现在,只要消息到达,LOCAL组处理程序就会识别使用者在哪个节点上,并相应地拾取消息。
此解决方案在server1正常运行之前一直有效。但是,如果server1宕机,消息将不再被处理。
为了解决这个问题,我添加了备份服务器到服务器1到服务器2的消息传递子系统活动mq,并对服务器2进行了类似的操作。
/profile=garima/subsystem=messaging activemq/server=backup:add
并向该备份服务器添加了相同的群集连接、发现组、http连接器、广播组,但当我尝试此解决方案时,似乎没有解决故障转移条件,消息也没有在其他节点上处理。
请建议任何其他方法,或者我如何配置带有LOCAL组处理程序的服务器停止的场景。
集群分组的推荐解决方案是您所配置的—使用LOCAL
分组处理程序备份节点。这里的底线是,如果集群中没有一个具有LOCAL分组处理程序的活动节点,那么就无法决定哪个使用者应该处理哪个组。在我看来,你的备份代理根本没有按预期工作(这可能是另一个问题的主题(。
除了备份之外,您还可以考虑完全消除集群。集群是使用水平扩展来提高总体消息吞吐量的一种方法。然而,消息分组自然会序列化每个组的消息消耗,从而降低总体消息吞吐量(可能严重取决于用例(。您可能不需要集群的性能可伸缩性,因为您正在对消息进行分组。您是否执行了任何基准测试来确定您的性能瓶颈?如果是这样的话,集群是解决这些瓶颈的行之有效的解决方案吗?