如何获取特定缓存条目所在的 infinispan 节点的 ip 地址
How do i get the ip address of the infinispan node where a specific cache entry is resides
我在分布式模式下使用 Infinispan 7.2.5 集群来缓存我无法在单台机器上缓存的大量数据。平均缓存条目 大小约为 1Mb.
我有一个 REST 应用程序,它从 Infinispan 集群获取缓存条目并过滤它并发送 缓存条目的一小部分(几 Kbs)作为响应。由于从 Infinispan 集群中检索 1Mb 的数据会影响 REST 应用程序性能,我正在寻找一种方法来过滤掉相应 Infinispan 节点本身内的缓存条目以减少网络延迟。
如果我可以获得缓存条目所在节点的 IP 地址,我可以在每个 Infinispan 服务器上使用另一个 REST 应用程序来处理缓存条目和 return 所需的响应。
我已经尝试使用 HotRod Java 客户端,但找不到获取 IP 地址的方法。
提前致谢! :)
在集群内定位key并不复杂,可以使用
Address address = cache.getAdvancedCache()
.getDistributionManager().getPrimaryLocation(key)
肮脏的事情发生在之后;您必须将其转换为 JGroupsAddress
并调用 getJGroupsAddress()
。但是,由于 JGroups 非常通用,因此也需要分配 IP;如果幸运的话,它是 IpAddress
的一个实例,您可以对其调用 getIpAddress()
。
更好的方法是使用 distributed executors 和过滤器作为任务,让 Infinispan 为您进行路由 - 另请参阅 DistributedExecutorService.submit(Callable<T> task, K... input);
:
Execution environment will chose an arbitrary node N hosting some or all of the keys specified as input
.
我在分布式模式下使用 Infinispan 7.2.5 集群来缓存我无法在单台机器上缓存的大量数据。平均缓存条目 大小约为 1Mb.
我有一个 REST 应用程序,它从 Infinispan 集群获取缓存条目并过滤它并发送 缓存条目的一小部分(几 Kbs)作为响应。由于从 Infinispan 集群中检索 1Mb 的数据会影响 REST 应用程序性能,我正在寻找一种方法来过滤掉相应 Infinispan 节点本身内的缓存条目以减少网络延迟。
如果我可以获得缓存条目所在节点的 IP 地址,我可以在每个 Infinispan 服务器上使用另一个 REST 应用程序来处理缓存条目和 return 所需的响应。
我已经尝试使用 HotRod Java 客户端,但找不到获取 IP 地址的方法。
提前致谢! :)
在集群内定位key并不复杂,可以使用
Address address = cache.getAdvancedCache()
.getDistributionManager().getPrimaryLocation(key)
肮脏的事情发生在之后;您必须将其转换为 JGroupsAddress
并调用 getJGroupsAddress()
。但是,由于 JGroups 非常通用,因此也需要分配 IP;如果幸运的话,它是 IpAddress
的一个实例,您可以对其调用 getIpAddress()
。
更好的方法是使用 distributed executors 和过滤器作为任务,让 Infinispan 为您进行路由 - 另请参阅 DistributedExecutorService.submit(Callable<T> task, K... input);
:
Execution environment will chose an arbitrary node N hosting some or all of the keys specified as
input
.