0

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

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

此图更好地显示了我想通过连接第一个和第二个 API 来解决的问题: 在此处输入图像描述

因此,我使用了 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)一切正常。

map.get(referenceId)我的问题是,在其他服务器使用该特定 ID 填充地图之前,我该怎么做才能被阻止?还有比使用 IMap 更好的选择吗?

4

1 回答 1

2

正如@noctarius 提到的,如果您一定要使用 IMap,EntryListener 将是最好的方法。下面是一个 EntryListener 如何工作的示例。

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

每当添加条目时,您都会订阅并收到通知。然后你可以触发你的逻辑。

于 2016-04-27T07:31:15.633 回答