1

我有 2 个以REPL_ASYNC模式运行的 HotRod 服务器。我正在尝试通过提供 hotrod 服务器地址和端口来使用 hotrod 客户端连接它。

我正在尝试实现类似于 Near Cache 的功能。不使用 Nearcache 来避免 RPC 调用的原因。我们希望控制 NearCache 完成的远程调用。我与通知侦听器一起实现了所有逻辑。因此,为此我尝试将 ClientListener 附加到 RemoteCache 上,然后想对事件通知采取行动。当所有服务器都在运行时,它按预期工作。但是当其中一个 hotrod 服务器停止或添加新服务器时,它没有得到更新的服务器视图。而当我在没有 ClientListener 的情况下运行 hotrod 客户端时,我正在获取服务器的更新视图。

任何人对此有想法请分享我尝试了很多东西但没有成功。

请建议是否有人遇到过这个问题?

更新:每当我们执行获取操作时获取更新的视图,但如果没有执行获取操作,则不会获取更新的拓扑视图

使用的配置:

final ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.clustering().stateTransfer().awaitInitialTransfer(true);
configurationBuilder.clustering().stateTransfer().fetchInMemoryState(true);
configurationBuilder.clustering().sync().replTimeout(15000);
configurationBuilder.clustering().cacheMode(CacheMode.REPL_ASYNC);
configurationBuilder.dataContainer().compatibility().enable();configurationBuilder.transaction().transactionMode(TransactionMode.TRANSACTIONAL);configurationBuilder.storeAsBinary().enable().storeKeysAsBinary(false).storeValuesAsBinary(false);
configurationBuilder.jmxStatistics().enabled(true);
configurationBuilder.eviction().strategy(LIRS);
configurationBuilder.eviction().maxEntries(25000);
configurationBuilder.expiration().lifespan(-1);
4

1 回答 1

1

我可以通过应用以下解决方法来解决此问题,可能会帮助遇到类似问题的人:

在 hotrod 服务器中,我在创建缓存的顶部有一个默认缓存。在客户端,我已将侦听器附加到我的缓存,但 infinispan 内部在执行 ping 操作以获取拓扑视图时使用默认缓存。因为我已将侦听器附加到我们自己的缓存中,并且它不是默认缓存,所以它无法在 ping 操作中获得更新的视图。

为了解决这个问题,我使用以下代码将其中一个缓存设置为默认缓存

new HotRodServerConfigurationBuilder().defaultCacheName("cacheName")

希望这会帮助有类似问题的人。

于 2018-02-27T06:12:45.643 回答