最近我尝试使用 JGroup 创建一个集群,以便连接到同一集群的不同计算机能够相互交换消息。
我已经在我的本地主机上尝试了简单的聊天应用程序(在2个java应用程序之间),它工作没有问题,即它们能够在彼此之间接收和发送消息。
这是场景 PC 1:由java模块(接收器)组成 服务器 2(使用 jgroup 的模块驻留在该服务器中):发件人
我的下一步是将发送者(集群的创建者)移动到另一个子网,但仍在同一网络内,因为我能够从我的 PC 1 ping 私有(private) IP 地址。理想情况下,服务器 1 将创建集群(第一个加入),当我在本地计算机上启动接收器时,它应该加入服务器 1 创建的集群。
这两个子网之间有一个防火墙。
我已经使用默认的 JChannel 设置尝试过此操作,但它不起作用。集群已创建,但 PC1 无法连接到该集群,而是形成了自己的集群。它们具有相同的集群名称。
我做了进一步的研究,我是否必须在服务器上设置 UDP 多播作为发送方和接收方,将 TCP 单播设置到服务器中创建的集群中?如果是这样,我读到我必须以 xml 或以编程方式配置协议(protocol)栈,并将它们传递到 JChannel 实例化中。使用 TCPPING 进行发现?
有人可以透露一些信息吗?其次,由于它们之间有防火墙,我需要设置 TCPGOSSIP 吗?
最诚挚的问候,
最佳答案
我在使用 mod_cluster 和 JGroups 以及 apache-camel 的环境中遇到了同样的问题。为了实现两个数据中心(子网)集成的要求,我在 TCP 上使用 JGroups 和 mod_cluster,而不是使用多播的默认 UDP。使用 JGroups,您需要设置一个文件,其中包含协议(protocol)栈的整个配置,包括 tcpping。在 JGroups 的 .jar 中,您可以找到 tcp.xml 和 tcp-nio.xml 等示例文件。我在使用 JGroups 3.4.1 时损失了一些时间,面临着 tcpping 配置问题,这些问题直到我升级到版本 3.6.13.Final 后才起作用。
如果您使用 JChannel 类,只需使用构造函数来接收包含配置的 XML 文件路径的字符串。不要忘记关键参数
-Djgroups.bind_addr
-Djgroups.tcpping.initial_hosts=NODE1[7800],NODE2[7800]
由 TCP 配置使用。根据您的情况,您还需要在防火墙中配置 JGroups 使用的端口。
希望有帮助。
关于java - 跨 2 个子网的 JGroup 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42371324/