0

我通过 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);
    }

}
4

1 回答 1

2

如果它可以在同一台机器上运行,那么您的代码就可以了。问题很可能出在发现上——节点找不到彼此。

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

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

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

于 2013-08-27T08:24:49.247 回答