一旦填充了Hazelcast,就可以从地图中获取值

时间:2016-04-25 20:11:45

标签: java hazelcast hazelcast-imap

我是Hazelcast的新手,在我看来,我正在努力解决一个非常简单的问题,但无法解决问题。

我有这个场景,我有2个webservices,在一个服务器(第一个API)中,我必须得到一个值,该值将在使用第二个API的不同服务器5秒后填充,并且我只有一个referenceId在两个服务器之间识别/获取/填充值。换句话说,当使用和ID调用我的第一个Api时,它将返回被推送到具有该ID的第二个Api的内容。

此图表通过连接第一个和第二个API更好地展示了我想要解决的问题: enter image description here

所以,我使用了一个IMap并做了一个' get'和'放'像这样:

//- First API -//
Integer referenceId = XXXX; // coming in the step 2
IMap<Integer, String> map = hazelcastInstance.getMap("ResponseMap");

Thread.sleep(5000); // Sleep here does the trick but it's the worst performance
String strResponse = map.get(referenceId);

另一方面,另一台服务器将在最多5秒之后将数据放入:

//- Second API -//
String refId = captureRefId(YYYY)
IMap<Integer, String> map = hazelcastInstance.getMap("ResponseMap");
map.put(refId, YYYY);

这个问题是map.get总是返回null,因为此时该值不存在,但是如果我添加sleep(5),一切正常。

我的问题是,如何阻止map.get(referenceId)被阻止,直到另一台服务器使用该特定ID填充地图?还有比使用IMap更好的选择吗?

1 个答案:

答案 0 :(得分:2)

正如@noctarius所提到的,如果你一定想要使用IMap,那么EntryListener将是最好的方法。以下是EntryListener如何工作的示例。

https://github.com/hazelcast/hazelcast-code-samples/blob/master/distributed-map/entry-listener/src/main/java/ListeningMember.java

您订阅并在添加条目时收到通知。然后你可以解雇你的逻辑。