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



>我在分发模式下使用 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键。

最新更新