如何获取特定缓存条目所在的infinispan节点的IP地址

时间:2016-02-24 16:17:08

标签: java infinispan

我在分发模式下使用Infinispan 7.2.5群集来缓存大量数据,我无法在一台机器中缓存。平均缓存条目大小约为1Mb

我有一个REST应用程序,它从Infinispan集群获取一个缓存条目并过滤它并发送缓存条目的一小部分(几Kbs)作为响应。由于从Infinispan集群中检索1Mb数据会影响REST应用程序性能,因此我正在寻找一种方法来过滤掉相应Infinispan节点内的缓存条目,以减少网络延迟。

如果我可以获取缓存条目所在节点的IP地址,我可以在每个Infinispan服务器上安装另一个REST应用程序来处理缓存条目并返回所需的响应。

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

提前谢谢! :)

1 个答案:

答案 0 :(得分:2)

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

Address address = cache.getAdvancedCache()
    .getDistributionManager().getPrimaryLocation(key)

之后发生了肮脏的事情;您必须将其转换为JGroupsAddress并致电getJGroupsAddress()。但是,由于JGroups非常通用,因此需要分配IP;如果你很幸运,它是IpAddress的一个实例,你可以在其上调用getIpAddress()

更好的方法是使用distributed executors将过滤器作为任务,让Infinispan为您执行路由 - 另请参阅DistributedExecutorService.submit(Callable<T> task, K... input);

  

执行环境将选择一个任意节点N,托管部分或全部指定为input的密钥。