从 Hazelcast 节点联系 Java 客户端

Contact Java client from a Hazelcast node

我有一个 hazelcast 集群,它为命令行触发的 java 客户端执行多项计算。我需要在节点仍在工作时将部分计算结果保存在客户端系统上。我将把部分数据存储在 Hazelcasts 地图中。现在我正在寻找一种方法来通知客户端节点已将数据存储在地图中并且他可以开始使用它。有没有办法从任何 hazelcast 节点触发客户端操作?

你的问题不是很清楚,但看起来你可以使用 com.hazelcast.core.EntryListener 来触发回调,当数据映射中存储新条目时通知客户端。

您的成员节点可以向 Hazelcast IQueueITopicRingBuffer 发布一些中间结果(或只是通知消息)。 流程看起来像这样。

  1. 客户端为 rignbuffer 注册一个侦听器。
  2. 客户端提交要在集群上执行的命令。
  3. 成员将中间结果保存到 IMaps 或任何其他数据结构
  4. 一位成员向主题发送了一条关于部分结果可用性的消息。
  5. 客户端在 IMap 中接收消息和访问数据。
  6. 成员在完成任务后发送消息。

类似的东西。 你可以找到一些例子 here

如果您对此有任何疑问,请告诉我。

干杯,

维克

解决问题有多种途径。最简单的一种是使用专用 IMap 或任何其他 Hazelcasts 同步集合。可以简单地在这样的地图中写入数据,并在添加后 retrieve/remove 它。但是这样会造成巨大的Overhead,因为数据要在整个集群同步。如果数据很大,集群很大,有几百个节点遍布全球或至少美国,数据将在所有节点上同步,只是为了在几分钟后删除,这也必须同步。不删除是不行的,因为数据会大好几gb,同步数据的成本会更高。问题得到解答,但解决方案并不适用于所有场景。