java - Hazelcast - 客户端模式 - 集群故障后如何恢复?

标签 java distributed-computing hazelcast hazelcast-imap

我们在我们的产品中使用hazelcast分布式锁和缓存功能。分布式锁定的使用对于我们的业务逻辑至关重要。

目前我们使用的是嵌入式模式(每个应用程序节点也是hazelcast集群成员)。我们将切换到客户端-服务器模式。

我们注意到客户端-服务器的问题是,一旦集群关闭一段时间,经过几次尝试后,客户端将被销毁,并且从该客户端检索到的任何对象( map 、集合等)将不再存在可用。 此外,即使 Hazelcast 集群恢复,客户端实例也不会恢复(我们收到 HazelcastInstanceNotActiveException )

我知道这个问题已被多次解决并最终成为一个功能请求:

issue1

issue2

issue3

我的问题:恢复客户端的策略应该是什么?目前我们计划在客户端进程中排队一个任务,如下所示。根据条件,它将尝试重新启动客户端实例... 我们将通过 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);
        }
    }

}

这种做法合适吗?我还尝试监听 LifeCycle 事件,但无法通过事件使其工作。

问候

最佳答案

在 Hazelcast 3.9 中,我们更改了客户端中连接和重新连接的工作方式。您可以在文档中阅读有关新行为的信息:http://docs.hazelcast.org/docs/3.9.1/manual/html-single/index.html#configuring-client-connection-strategy

我希望这会有所帮助。

关于java - Hazelcast - 客户端模式 - 集群故障后如何恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47572092/

相关文章:

java - jsp:this指的是jsp页面的jave代码块<%%>中的哪个对象?

java - Java 如何处理 UTF-16 中无法编码的字符?

python - 多 GPU tensorflow 代码中的批量归一化参数更新?

computer-science - 难以理解伯克利算法

java - 如何在请求正文中通过 RestTemplate POST xml 数据?

java - 如何在不知道 avro 模式的情况下在 scala 中读取 Avro 编码的 kafka 消息?

c - 如何使用 C 在 MPI 中发送(MPI_Send)具有指针字段的嵌套结构

java - 在 hazelcast 中启动任务有时会持续 > 2 秒

tcp - 用于多个网络接口(interface)的 Hazelcast 程序化 TCPIP 配置

java - Hazelcast MapStore 作为 Spring 组件