我是Hazelcast的新手,我认为这是一个非常简单的问题,但却无法解决。

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

该图更好地显示了我想通过连接第一和第二API来解决的问题:
java - 用Hazelcast填充 map 后,从 map 中获取值-LMLPHP

因此,我使用了IMap并执行了“获取”和“放置”操作,如下所示:

//- 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),一切都会很好。

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

最佳答案

如@noctarius所述,如果您一定要使用IMap,则EntryListener将是最好的方法。这是一个EntryListener如何工作的示例。

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

您订阅并在添加条目时得到通知。然后,您可以触发逻辑。

10-05 23:20
查看更多