JGroups不适用于不同的计算机

时间:2013-07-28 06:09:19

标签: java multicast jgroups

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

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 个答案:

答案 0 :(得分:1)

如果它在同一台机器上运行,那么您的代码就可以了。很可能问题在于发现 - 节点没有找到对方。

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

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

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