0

jgroupsでクラスタへのコネクタを作りました。私のコネクタのインスタンスは正しく動作し、同じマシンで実行されている場合は他のメッセージを受け取りますが、2 つの異なるマシンで実行されている場合は他のメッセージをキャッチしません。私の 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 に答える