Hazelcast 3.7.4 无法重新初始化地图

Hazelcast 3.7.4 fails to reinitialize map

在第一次尝试失败的情况下,Hazelcast 无法从 MapLoader 重新初始化地图。 MapLoader 从数据库加载数据。

测试用例:

  1. 启动服务器成员
  2. 开始客户会员
  3. 断开与数据库的连接
  4. 尝试从 Hazelcast 地图获取数据(从 MapLoader 启动延迟加载) 观察异常。
  5. 恢复与数据库的连接
  6. 重复步骤 4。重复步骤 4 的异常。

因此,Hazelcast 进入 Map 不重启就无法初始化的状态。

你遇到过这样的行为吗?

请推荐解决方法或解决方案?

更新:

如果从客户端成员端调用 map.keySet(),则会重现这种行为。

当您尝试通过地图 get/put/remove 数据时,Hazelcast 仅调用相关的 MapStoreMapLoader 方法。没有用于初始化数据库连接的特定方法调用(Hazelcast 提供了一个 MapLoaderLifecycleSupport 接口来初始化 MapLoader 实现,但它的 init() 方法再次仅在首次使用地图时调用在 Hazelcast 实例上,而不是每次执行映射操作时)。

因此;您需要在 MapStore 实现中自行处理数据库连接问题。例如;当您在实施中尝试 put/read/remove 数据 to/from 您的数据库时,您需要检查连接并重新建立连接(如果不存在)。

经过长时间的调查没有找到问题的原因,但是如果在初始化失败后调用 map.size(),Hazelcast 地图会恢复。 这很奇怪,但它有效。