Java 如何获取特定缓存项所在的infinispan节点的ip地址

Java 如何获取特定缓存项所在的infinispan节点的ip地址,java,infinispan,Java,Infinispan,我在分发模式下使用Infinispan 7.2.5 cluster来缓存大量数据,而我无法在一台机器中进行缓存。平均缓存项大小约为1Mb 我有一个REST应用程序,它从Infinispan集群获取一个缓存项,并对其进行过滤,然后将缓存项的一小部分作为响应发送出去。由于从Infinispan群集检索1Mb的数据会影响REST应用程序的性能,因此我正在寻找一种方法来过滤相应Infinispan节点本身内的缓存项,以减少网络延迟 如果我可以获得缓存项所在节点的IP地址,那么我可以在每个Infinisp

我在分发模式下使用Infinispan 7.2.5 cluster来缓存大量数据,而我无法在一台机器中进行缓存。平均缓存项大小约为1Mb

我有一个REST应用程序,它从Infinispan集群获取一个缓存项,并对其进行过滤,然后将缓存项的一小部分作为响应发送出去。由于从Infinispan群集检索1Mb的数据会影响REST应用程序的性能,因此我正在寻找一种方法来过滤相应Infinispan节点本身内的缓存项,以减少网络延迟

如果我可以获得缓存项所在节点的IP地址,那么我可以在每个Infinispan服务器上使用另一个REST应用程序来处理缓存项并返回所需的响应

我已经尝试使用HotRod Java客户端,但找不到获取IP地址的方法


先谢谢你!:)

在集群中定位密钥并不复杂,您可以使用

Address address = cache.getAdvancedCache()
    .getDistributionManager().getPrimaryLocation(key)
肮脏的事情随后发生;您必须将其转换为
JGroupsAddress
并调用
getJGroupsAddress()
。但是,由于JGroups非常通用,因此也需要分配IP;如果幸运的话,它是
IpAddress
的一个实例,您可以对其调用
getIpAddress()

更好的方法是将过滤器作为任务使用,并让Infinispan为您执行路由-另请参见DistributedExecutorService.submit(可调用任务,K…输入)

执行环境将选择一个任意节点N,该节点承载指定为
input
的部分或全部键


在集群中定位密钥并不复杂,您可以使用

Address address = cache.getAdvancedCache()
    .getDistributionManager().getPrimaryLocation(key)
肮脏的事情随后发生;您必须将其转换为
JGroupsAddress
并调用
getJGroupsAddress()
。但是,由于JGroups非常通用,因此也需要分配IP;如果幸运的话,它是
IpAddress
的一个实例,您可以对其调用
getIpAddress()

更好的方法是将过滤器作为任务使用,并让Infinispan为您执行路由-另请参见DistributedExecutorService.submit(可调用任务,K…输入)

执行环境将选择一个任意节点N,该节点承载指定为
input
的部分或全部键


谢谢弗拉维乌斯。这就是我要找的。谢谢弗拉维乌斯。这就是我要找的。