我们在产品中使用Hazelcast分布式锁定和缓存功能。分布式锁定的使用对于我们的业务逻辑至关重要。
当前我们正在使用嵌入式模式(每个应用程序节点也是Hazelcast群集成员)。我们将切换到客户端 - 服务器模式。
我们已经注意到客户端的问题 - 服务器是,一旦群集停止了一段时间,在销毁了几次尝试客户端,并且从该客户端检索到的任何对象(地图,集合等)不再是可用。此外,即使在Hazelcast集群恢复后,客户端实例也无法恢复(我们接收HazelCastInstancenotactiveException)
我知道这个问题已经被多次解决,最终作为功能请求:
问题1
第2期
第3期
我的问题:恢复客户的策略应该是什么?目前,我们计划在下面的客户过程中加入任务。基于条件,它将尝试重新启动客户端实例...我们将通过clientinstance.getLifeCycleService()。isrunning()检查。
这是任务代码:
private class ClientModeHazelcastInstanceReconnectorTask implements Runnable {
@Override
public void run() {
try {
HazelCastService hazelcastService = HazelCastService.getInstance();
HazelcastInstance clientInstance = hazelcastService.getHazelcastInstance();
boolean running = clientInstance.getLifecycleService().isRunning();
if (!running) {
logger.info("Current clientInstance is NOT running. Trying to start hazelcastInstance from ClientModeHazelcastInstanceReconnectorTask...");
hazelcastService.startHazelcastInstance(HazelcastOperationMode.CLIENT);
}
} catch (Exception ex) {
logger.error("Error occured in ClientModeHazelcastInstanceReconnectorTask !!!", ex);
}
}
}
这种方法合适吗?我还试图聆听生命周期事件,但无法通过事件使其正常工作。
问候
在Hazelcast 3.9中,我们更改了连接和重新连接在客户端的工作方式。您可以在文档中阅读有关新行为的信息:http://docs.hazelcast.org/docs/3.9.1/manual/html/html-single/index.html#configuring-client-connection-connection-connection-srategy
我希望这会有所帮助。
在Hazelcast 3.10中,您可以将连接尝试限制从2(默认情况下)增加到最大值:
clientconfig clientconfig = new ClientConfig(); clientconfig.getNetworkConfig()。setConnectionAttementLimit(integer.max_value);