Hazelcast 和自定义序列化程序的需要;在创建服务器时有效,但在连接到现有服务器时无效

Hazelcast and the need for custom serializers; works when creating the server but not when connecting to existing

我们正在使用 Hazelcast 在分布式地图中存储内容。我们在使用远程服务器时遇到问题,我需要一些关于我们可以采取哪些措施来解决该问题的反馈。

我们创建服务器 - WORKS

我们在应用程序的 JVM 中创建一个新服务器 (Hazelcast.newHazelcastInstance)。我们传入的 hazelcast Config 对象有一堆自定义序列化器,为我们要放入映射中的所有类型定义。我们的对象是 Protobuf、普通 java 对象以及两者的组合。服务器启动,我们可以将对象放入地图中,稍后再取回对象。我们最近决定在自己的专用服务器上启动 运行 Hazelcast,因此我们尝试了以下方案。

服务器已经存在于外部,我们作为客户端连接 - 不起作用

我们连接到一个已经是 运行 的远程实例,而不是创建我们的 Hazelcast 实例。我们传入一个配置,其中包含我们之前使用的所有相同的序列化程序。我们成功连接到 Hazelcast,我们可以将东西放入地图中(据我所知是有效的)但我们没有得到任何东西。不会触发任何事件让我们的听众知道对象已添加到地图中。

我希望能够连接到已经 运行 在我们的 JVM 之外的 Hazelcast 实例。它不适用于我们的用例,我不确定它应该如何工作。

  1. JVM 运行 Hazelcast 在其 class 加载程序中是否需要我们可能放入映射中的所有 class 类型?看起来这可能就是问题所在,但这不会限制使用 Hazelcast 吗?
  2. 您通常如何处理这些 class 加载程序问题?
  3. 假设以上为真,有没有办法告诉 Hazelcast 我们将在将对象放入地图之前对其进行序列化?基本上我们会给 Hazelcast 一个 ID 和字节数组,这就是我们在 return 中所期望的。如果是这样,就可以避免整个 class 加载程序问题,我想我们已经 运行 了。我们不需要能够根据对象的字段来搜索对象。我们只需要知道对象来来去去以及它们的 ID 是什么。

@Jonathan,在使用客户端-服务器架构时,除非您使用查询或其他需要在集群上序列化数据的操作,否则成员不需要了解任何关于序列化的知识。他们只是存储已经序列化的数据并提供服务。如果您提到的这些侦听器在客户端应用程序上,它应该可以正常工作。

Hazelcast 有一项称为用户代码部署的功能,https://docs.hazelcast.org/docs/3.11/manual/html-single/index.html#member-user-code-deployment-beta,但它主要针对用户 类。序列化相关的配置应该出现在成员上,或者你应该稍后添加并滚动重启。

如果你能分享一些exceptions/setup等,我也可以给出具体的答案。