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