我在分发模式下使用Infinispan 7.2.5群集来缓存大量数据,我无法在一台机器中缓存。平均缓存条目大小约为1Mb 。
我有一个REST应用程序,它从Infinispan集群获取一个缓存条目并过滤它并发送缓存条目的一小部分(几Kbs)作为响应。由于从Infinispan集群中检索1Mb数据会影响REST应用程序性能,因此我正在寻找一种方法来过滤掉相应Infinispan节点内的缓存条目,以减少网络延迟。
如果我可以获取缓存条目所在节点的IP地址,我可以在每个Infinispan服务器上安装另一个REST应用程序来处理缓存条目并返回所需的响应。
我尝试使用HotRod Java客户端,但无法找到获取IP地址的方法。
提前谢谢! :)
答案 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
的密钥。