java - 重新连接 Hazelcast 客户端

标签 java hazelcast

我们正在使用 Java Hazelcast 客户端连接到外部 Hazelcast 集群(版本 3.7.2),但如果集群出现故障,则在重新连接时会遇到问题。

我们正在使用 HazelcastClient.newHazelcastClient 创建我们的客户端。一旦我们这样做,我们将保留 HazelcastInstance 的副本并使用它与 Hazelcast 集群(getMapgetSet 等)进行交互。 ).我们还将我们从 HazelcastInstance 获得的 map 、集合等存储在可能长期存在的对象中。在快乐的道路上一切正常。但是,如果集群曾经关闭并重新启动,我们在尝试访问这些在集群关闭之前创建的对象时会得到 HazelcastInstanceNotActiveException

有没有一种方法可以在集群重新联机时自动重新建立客户端连接,以便我们可以继续使用我们之前在集群出现故障之前从 Hazelcast 检索到的对象( map 、集合等)?或者我们是否需要额外的代码来捕获 HazelcastInstanceNotActiveException,然后重建 HazelcastInstance 以及我们存储在客户端应用程序中的任何对象?后者似乎是非常具有侵入性的,并且在我们存储这些 Hazelcast 对象之一的每个实例中绝对不希望处理。

我读过的大部分内容都涉及连接超时、尝试限制和尝试超时的 NetworkConfig 设置。我们目前正在使用默认值,但在访问我们已经检索到的对象时它们似乎没有做任何事情。即使在集群备份后,对先前存在的对象的任何访问也会立即失败并返回 HazelcastInstanceNotActiveException

这似乎是许多人会遇到的常见问题。处理此问题的最佳做法是什么?

最佳答案

在 Hazelcast 3.11 中发布了指数退避客户端重新连接策略:https://docs.hazelcast.org/docs/latest/manual/html-single/#configuring-client-connection-retry .

<hazelcast-client>
  ...
   <connection-strategy async-start="false" reconnect-mode="ON">
        <connection-retry enabled="true">
            <initial-backoff-millis>1000</initial-backoff-millis>
            <max-backoff-millis>60000</max-backoff-millis>
            <multiplier>2</multiplier>
            <fail-on-max-backoff>true</fail-on-max-backoff>
            <jitter>0.5</jitter>
        </connection-retry>
   </connection-strategy>
  ...
</hazelcast-client>

关于java - 重新连接 Hazelcast 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41713135/

相关文章:

docker - 在 DCOS/Marathon 和 docker 上发现 Hazelcast TCP/IP

java - Perl 到 Java 的翻译

java - 在 tomcat 上运行时 ClassLoader.getSystemResourceAsStream 不工作

java - 获取列表的独特元素

docker - Elastic Beanstalk docker 内的榛子广播集群

java - 可以接受多个键并返回多个值的 java-backend 缓存

Java注解动态类型转换

java - 为什么可以轻松地重建Java类文件

spring - Hazelcast 缓存未根据 <生存时间秒> 逐出

java - Hazelcast:如何确保集群启动完成