JGroups 从收到的消息中获取 IPAddess/bind_addr
JGroups fetch IPAddess/bind_addr from a received Message
我有一个工作正常的 3 节点 JGroups 集群。有什么方法可以通过通信协议从其他节点检索 bind_addr
属性 吗?
本质上,我正在尝试获取发送方的 IP 地址(在接收方上),或更改后的 view
中 dead
节点的 IP 地址。有这样的方法吗?
此外,class Address
包含 hostname
,我们能否将此 class 配置为包含 IP 地址 (bind_addr
),以便我可以利用?
address instanceof IpAddress
这家伙returns我false
(因为它是UUID
的一个实例)。
在当前节点上:
GMS gms = (GMS) stack.findProtocol(GMS.class);
logger.info("GMS.local address : "+gms.getLocalAddress());
它 returns 我 hostname
:(
我知道建议使用 hostname
,但我还想在消息 requests/cluster join/leave 视图更改中检索 bind_addr
。
有什么帮助吗?
ProtocolStack stack = channel.getProtocolStack();
final TCP tcp = (TCP) stack.findProtocol(TCP.class);
channel.addAddressGenerator(new AddressGenerator() {
public Address generateAddress() {
ExtendedUUID retval = ExtendedUUID.randomUUID();
retval.put("ip", tcp.getBindAddress().getAddress());
return retval;
}
});
channel.connect(clusterName);
byte[] ipAsByteArray =((ExtendedUUID)sourceAddress).get("ip");
String str=Util.bytesToString(ipAsByteArray);
这会打印垃圾字符:|
关于检索IP,您应该掌握传输协议(UDP
或TCP
)并调用getBindAddress()
。
您可以通过自定义地址发送此信息。为此,您需要使用 AddressGenerator
:
JChannel ch=new JChannel();
ch.addAddressGenerator(new AddressGenerator() {
public Address generateAddress() {
ExtendedUUID extendedAddress=ExtendedUUID.randomUUID();
retval.put("ip", Util.stringToBytes(transportProtocol.getBindAddress().getAddress()));
return extendedAddress;
}
});
ch.connect("my-cluster");
ExtendedUUID
基本上是一种向地址添加额外有效载荷的方法,但请注意,此有效载荷与所有消息一起发送(保持较小!)
要检索有效负载,您需要从消息中获取地址并执行如下操作:
Address sourceAddress = message.getSrc();
byte[] ipAsByteArray =((ExtendedUUID)sourceAddress).get("ip");
String str=Util.bytesToString(ipAsByteArray);
我有一个工作正常的 3 节点 JGroups 集群。有什么方法可以通过通信协议从其他节点检索 bind_addr
属性 吗?
本质上,我正在尝试获取发送方的 IP 地址(在接收方上),或更改后的 view
中 dead
节点的 IP 地址。有这样的方法吗?
此外,class Address
包含 hostname
,我们能否将此 class 配置为包含 IP 地址 (bind_addr
),以便我可以利用?
address instanceof IpAddress
这家伙returns我false
(因为它是UUID
的一个实例)。
在当前节点上:
GMS gms = (GMS) stack.findProtocol(GMS.class);
logger.info("GMS.local address : "+gms.getLocalAddress());
它 returns 我 hostname
:(
我知道建议使用 hostname
,但我还想在消息 requests/cluster join/leave 视图更改中检索 bind_addr
。
有什么帮助吗?
ProtocolStack stack = channel.getProtocolStack();
final TCP tcp = (TCP) stack.findProtocol(TCP.class);
channel.addAddressGenerator(new AddressGenerator() {
public Address generateAddress() {
ExtendedUUID retval = ExtendedUUID.randomUUID();
retval.put("ip", tcp.getBindAddress().getAddress());
return retval;
}
});
channel.connect(clusterName);
byte[] ipAsByteArray =((ExtendedUUID)sourceAddress).get("ip");
String str=Util.bytesToString(ipAsByteArray);
这会打印垃圾字符:|
关于检索IP,您应该掌握传输协议(UDP
或TCP
)并调用getBindAddress()
。
您可以通过自定义地址发送此信息。为此,您需要使用 AddressGenerator
:
JChannel ch=new JChannel();
ch.addAddressGenerator(new AddressGenerator() {
public Address generateAddress() {
ExtendedUUID extendedAddress=ExtendedUUID.randomUUID();
retval.put("ip", Util.stringToBytes(transportProtocol.getBindAddress().getAddress()));
return extendedAddress;
}
});
ch.connect("my-cluster");
ExtendedUUID
基本上是一种向地址添加额外有效载荷的方法,但请注意,此有效载荷与所有消息一起发送(保持较小!)
要检索有效负载,您需要从消息中获取地址并执行如下操作:
Address sourceAddress = message.getSrc();
byte[] ipAsByteArray =((ExtendedUUID)sourceAddress).get("ip");
String str=Util.bytesToString(ipAsByteArray);