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