2016-08-10 65 views
0

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

+0

你可以发布一些代码,显示你试图实现什么? – noscreenname

+0

是的,请查阅'MapStore',也许它可以帮助吗? – vikingsteve

回答

0

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

+0

我的问题发布几分钟后,我偶然发现了这个功能。它看起来正是我所需要的。我会在测试环境中尝试它,并在此处发布代码或询问更多问题。谢谢。 – vitsja

0

您的成员节点可以向Hazelcast IQueueITopicRingBuffer发布一些中间结果(或只是通知消息)。 流程如下所示。

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

就是这样的。 你可以找到一些例子here

让我知道你是否有任何问题。

干杯,

维克

0

有几种途径来解决这个问题。最简单的就是使用专用的IMap或Hazelcasts的任何其他同步收藏。人们可以简单地在这样的地图中写入数据,并在添加之后检索/删除数据。但是这会造成巨大的开销,因为数据必须在整个集群中同步。如果数据量很大,并且集群规模庞大,遍布全球或至少美国的数百个节点,则数据将在所有节点上同步,以便稍后进行删除,这也必须进行同步。不删除是不行的,因为数据可能会有几个大的数据,这会使数据的同步更加昂贵。问题得到了解答,但解决方案并不适用于所有情况。