2013-07-28 98 views
0

我通过jgroups创建了一个集群连接器。我的连接器实例在正在同一台计算机上运行时可以正常工作并获取其他消息,但当它们在两台不同的计算机上运行时,它们不会收到其他消息。 我JGroups的连接器类:JGroups不能在不同的机器上工作

public class JGroupsMulticastConnector implements Sender, Listener { 
    JChannel basicChannel = null; 
    String clusterName = ""; 

    public JGroupsMulticastConnector(String clusterName) { 
     this.clusterName = clusterName; 
     try { 
      basicChannel = new JChannel(); 

     } catch (Exception e) { 
      MyLogger.error(e, name); 
     } 
    } 

    public void init() { 
     try { 
      basicChannel.connect(clusterName); 
      basicChannel.setReceiver(new ReceiverAdapter(){ 
       @Override 
       public void receive(org.jgroups.Message msg) { 
        System.out.println(name+":"+"Got a Message"); 
        super.receive(msg); 
       } 
      }); 

     } catch (Exception e) { 
      MyLogger.error(e, name); 
     } 
    } 

    public void shutdown() { 

     basicChannel.disconnect(); 
    } 

    @Override 
    public void send(Message msg) { 
     basicChannel.send(msg); 
    } 

} 

回答

1

如果它工作在同一台机器上,你的代码是好的。发现问题的可能性很大 - 节点找不到彼此。

看看你配置好的堆栈,并检查你使用的发现协议。如果您使用TCPPING(http://www.jgroups.org/javadoc/org/jgroups/protocols/TCPPING.html),则需要重新配置节点的IP地址。

最有可能的是,它将使用多播来发现节点的MPING(http://www.jgroups.org/javadoc/org/jgroups/protocols/MPING.html)。确保在这些节点之间发送多播消息。通常,防火墙会丢弃该多点传送通信(您可以暂时关闭防火墙进行测试)。

此外,请检查您的网络组件是否正在丢弃多播通信。

相关问题