2013-07-28 99 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)。確保在這些節點之間發送多播消息。通常,防火牆會丟棄該多點傳送通信(您可以暫時關閉防火牆進行測試)。

此外,請檢查您的網絡組件是否正在丟棄多播通信。

相關問題