服务器重启后如何将HazelcastClient重新连接到HazelcastServer

我在基于微服务和springboot的架构中使用hazelcast时遇到了问题。我保留其中一个应用程序作为hazelcast服务器的应用程序,其他应用程序是客户端。但是,如果我必须更新作为hazelcast服务器的应用程序,则缓存的客户端应用程序会推翻与服务器的连接,当我启动新版本的服务器时,这些客户端应用程序不会重新连接。是否有任何关闭设置hazelcastclient在服务器上进行池化以尝试重新连接一旦它回来?我的客户如下:

    @bean
    open fun hazelcastInstance(): HazelcastInstance? {
    return try {
    val clientConfig = ClientConfig()
    HazelcastClient.newHazelcastClient(clientConfig)
    } catch (e: Exception) {
    log.error("Could not connect to hazelcast server, server up without cache")
    null
    }

}

如果我的服务器出现故障,我收到“com.hazelcast.client.HazelcastClientNotActiveException:Client is shutdown”。

如果你能帮助我,我很感激

4
投票

“连接尝试限制”和“连接尝试时间段”配置元素有助于配置客户端的重新连接行为。客户端将重试ClientNetworkConfig.connectionAttemptLimit次数以重新连接到群集。 Connection Attempt Period是ClientNetworkConfig.connectionAttemptLimit定义的连接尝试之间的持续时间(以毫秒为单位)。以下是配置它们的示例:

ClientConfig clientConfig = new ClientConfig();
clientConfig.getNetworkConfig().setConnectionAttemptLimit(5);
clientConfig.getNetworkConfig().setConnectionAttemptPeriod(5000);

从Hazelcast 3.9开始,您可以使用配置元素reconnect-mode来配置客户端在断开连接后如何重新连接到群集。它有三个选项(OFFONASYNC)。选项OFF禁用重新连接。 ON以阻塞方式启用重新连接,其中所有等待的调用将被阻止,直到群集连接建立或失败。选项ASYNC以非阻塞方式启用重新连接,其中所有等待调用将接收HazelcastClientOfflineException。它的默认值是ON。您可以在下面看到配置示例:

ClientConfig clientConfig = new ClientConfig();
clientConfig.getConnectionStrategyConfig()
               .setReconnectMode(ClientConnectionStrategyConfig.ReconnectMode.ON);