Java Jgroup获取物理地址

Java Jgroup获取物理地址,java,jgroups,Java,Jgroups,我有几个服务器是用JGroup镜像的。最近出现了一些不同步的意外行为,基于日志,Jgroup将不时断开连接。我想在JGroup代码中编写一个小程序,在JGroup断开连接后通过电子邮件发送出去,并报告哪台机器断开了连接 问题是,基于JavaDoc,我似乎无法从成员或视图中提取物理IP地址。有人知道我该怎么做吗?我不知道你能不能,我也不知道该怎么做。我最后做的是添加节点的IP作为广播消息的一部分。它需要一些额外的编码,但它可以工作。这是一个黑客攻击,但它可以工作。JGroups团队已经声明,这是危

我有几个服务器是用JGroup镜像的。最近出现了一些不同步的意外行为,基于日志,Jgroup将不时断开连接。我想在JGroup代码中编写一个小程序,在JGroup断开连接后通过电子邮件发送出去,并报告哪台机器断开了连接


问题是,基于JavaDoc,我似乎无法从成员或视图中提取物理IP地址。有人知道我该怎么做吗?

我不知道你能不能,我也不知道该怎么做。我最后做的是添加节点的IP作为广播消息的一部分。它需要一些额外的编码,但它可以工作。

这是一个黑客攻击,但它可以工作。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();
    }
}

阐述Cavyn VonDeylen的方法:获取给定通道的物理地址

jgroups 2.x:

PhysicalAddress physicalAddress = (PhysicalAddress) 
      channel.downcall(
        new Event(
          Event.GET_PHYSICAL_ADDRESS, channel.getAddress()
        )
      );
jgroups 3.x:频道下行()已被删除;因此,Channel.down()已被更改以替换前者的功能

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

不考虑任何jgroups版本,physicalAddress将以IP:port格式返回字符串。

I concurt
JGroups
没有提供直接的方法来检索通道的物理地址请原谅我的无知-但是为什么通道物理地址与节点物理地址(可以使用InetAddress获取)不相同?您应该转换为IpAddress,并使用单独的方法获取InetAddress和端口。