首页 文章

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

提问于
浏览
0

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

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

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

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

先感谢您! :)

1 回答

  • 2

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

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

    之后发生了肮脏的事情;你必须把它强制转换为 JGroupsAddress 并调用 getJGroupsAddress() . 但是,由于JGroups非常通用,因此需要分配IP;如果您 IpAddressIpAddress 的实例,您可以在其上调用 getIpAddress() .

    更好的方法是使用distributed executors和过滤器作为任务,让Infinispan为你做路由 - 另见 DistributedExecutorService.submit(Callable<T> task, K... input);

    执行环境将选择托管指定为输入的部分或全部键的任意节点N.

相关问题