3

JGroupでミラーリングされたサーバーがいくつかあります。最近、同期がとれておらず、ログに基づいているという予期しない動作が発生し、Jgroupは時々切断されます。JGroupが切断されたら電子メールで送信し、どのマシンが切断されたかを報告するために、JGroupコード内に小さなプログラムを作成したいと思います。

問題は、JavaDocに基づいて、メンバーまたはビューから物理IPアドレスを抽出できないようです。誰もが私がそれを行うことができる方法を知っていますか?

4

3 に答える 3

3

これはハックですが、機能します。JGroupsチームは、基礎となるコードをいつでも変更する可能性があるため、これは危険であると述べています。注意して使用してください。

public void receive(Message msg) {
    String srcIp;   
    Address addr = msg.getSrc();

    PhysicalAddress physicalAddr = (PhysicalAddress)channel.down(new Event(Event.GET_PHYSICAL_ADDRESS, addr));

    if(physicalAddr instanceof IpAddress) {
        IpAddress ipAddr = (IpAddress)physicalAddr;
        InetAddress inetAddr = ipAddr.getIpAddress();
        srcIp = inetAddr.getHostAddress();
    }
}
于 2011-12-21T20:09:25.833 に答える
1

Cavyn VonDeylenのアプローチを詳しく説明するには:特定のチャネルの物理アドレスを取得します

jgroups 2.x:

PhysicalAddress physicalAddress = (PhysicalAddress) 
      channel.downcall(
        new Event(
          Event.GET_PHYSICAL_ADDRESS, channel.getAddress()
        )
      );

jgroups 3.x: Channel.downcall()が削除されました。そのため、Channel.down()は、以前の機能を置き換えるように変更されました。

PhysicalAddress physicalAddress = (PhysicalAddress) 
      channel.down(
        new Event(
          Event.GET_PHYSICAL_ADDRESS, channel.getAddress()
        )
      );

jgroupsのバージョンに関係なく、physicalAddressはIP:port形式の文字列を返します。

于 2013-06-26T04:17:23.530 に答える
0

できるかわかりませんが、どうすればいいのかわかりませんでした。私がやったことは、ブロードキャストメッセージの一部としてノードのIPを追加することです。追加のコーディングが必要ですが、機能します。

于 2011-12-05T09:17:14.887 に答える