最近,我正在尝试使用JGroup创建集群,以便连接到同一集群的不同机器能够相互交换消息。
我已经在我的本地主机上尝试了简单的聊天应用程序(在2个Java应用程序之间),并且没有问题,即它们能够彼此之间收发消息。
这是场景
PC 1:包含一个Java模块(Receiver)
服务器2(使用jgroup的模块驻留在此服务器中):发件人
我的下一步是将发件人(群集的创建者)移动到另一个子网,但仍与我能够从PC 1 ping私有ip地址位于同一网络中。理想情况下,服务器1将创建群集(首先是join),当我在本地计算机上启动接收器时,它应该加入服务器1创建的集群。
这两个子网之间有一个防火墙。
我已经尝试使用默认的JChannel设置来执行此操作,但是它不起作用。创建了群集,但是PC1无法连接到群集,而是形成了自己的群集。它们具有相同的集群名称。
我进行了进一步的研究,是否必须在服务器上将UDP多播设置为发送方和接收方,将TCP单播设置为在服务器中创建的群集中?如果是这样,我读到我必须配置协议栈,并以xml或以编程方式进行配置,然后将其传递给JChannel实例化。使用TCPPING进行发现?
谁能阐明一些想法?其次,由于它们之间有防火墙,我是否需要设置TCPGOSSIP?
最好的祝福,
最佳答案
我在使用mod_cluster和带有apache-camel的JGroups的环境中遇到了同样的问题。为了达到集成两个数据中心(子网)的要求,我在TCP上使用了JGroups和mod_cluster,而不是通过组播使用默认的UDP。使用JGroups,您需要设置一个文件,其中包含协议堆栈(包括tcpping)的整个配置。在JGroups的.jar中,您可以找到示例文件,例如tcp.xml和tcp-nio.xml。我花了一些时间使用JGroups 3.4.1,面对tcpping配置问题,直到我升级到3.6.13.Final版本,该问题才起作用。
如果您使用的是JChannel类,则只需使用构造函数,该构造函数会接收一个String,该String包含指向包含配置的XML文件的路径。不要忘记关键参数-Djgroups.bind_addr -Djgroups.tcpping.initial_hosts=NODE1[7800],NODE2[7800]
由TCP配置使用。在您的情况下,您还需要配置防火墙中JGroups使用的端口。
希望能有所帮助。