>我在分发模式下使用 Infinispan 7.2.5 集群来缓存大量无法在单台机器中缓存的数据。平均缓存条目大小约为 1Mb。
我有一个 REST 应用程序,它从 Infinispan 集群获取缓存条目并对其进行过滤并发送一小部分缓存条目(几 Kbs)作为响应。由于从 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(Callable<T> task, K... input);
:
执行环境将选择任意节点N托管部分或全部指定为
input
键。