我有一些與JGroup鏡像的服務器。最近出現了一些意外行爲,它不同步並且基於日誌,Jgroup將不時斷開連接。我想在JGroup代碼中編寫一個小程序,在JGroup斷開連接併發送報告哪臺機器已斷開連接時發送電子郵件。Jgroup獲得物理地址
問題是,基於JavaDoc我似乎無法從成員或視圖中提取物理IP地址。任何人都知道我該怎麼做?
我有一些與JGroup鏡像的服務器。最近出現了一些意外行爲,它不同步並且基於日誌,Jgroup將不時斷開連接。我想在JGroup代碼中編寫一個小程序,在JGroup斷開連接併發送報告哪臺機器已斷開連接時發送電子郵件。Jgroup獲得物理地址
問題是,基於JavaDoc我似乎無法從成員或視圖中提取物理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();
}
}
我不確定你能不能,我無法弄清楚如何。我最終做的是添加節點的IP作爲廣播消息的一部分。它需要一些額外的編碼,但它工作。
我同意。 'JGroups'沒有提供直接的方法來檢索頻道的物理地址 –
要精心Cavyn VonDeylen的辦法:讓一個給定信道的物理地址
JGroups的2.X:
PhysicalAddress physicalAddress = (PhysicalAddress)
channel.downcall(
new Event(
Event.GET_PHYSICAL_ADDRESS, channel.getAddress()
)
);
的JGroups 3.X:通道。 downcall()已被刪除;所以Channel.down()已被更改爲取代以前的功能。
PhysicalAddress physicalAddress = (PhysicalAddress)
channel.down(
new Event(
Event.GET_PHYSICAL_ADDRESS, channel.getAddress()
)
);
而不管任何的JGroups版本中,physicalAddress將在IP的形式返回一個字符串:端口格式。
您應該轉換爲IpAddress,並使用單獨的方法將InetAddress與端口一起獲取。 –
請原諒我的無知 - 但爲什麼不是通道的物理地址與節點物理地址相同(可以使用InetAddress)? –