我是 Hazelcast 的新手,在我看来,我正在努力解决一个非常简单的问题,但无法解决它。
我有这样的场景,我有 2 个 Web 服务,在一个服务器(第一个 API)中,我必须使用第二个 API 从另一台服务器获取 5 秒后填充的值,并且我只有一个引用 ID在两个服务器之间识别/获取/填充值。换句话说,当使用 ID 调用我的第一个 Api 时,它将返回推送到具有该 ID 的第二个 Api 的内容。
此图更好地显示了我想要通过连接第一个和第二个 API 来解决的问题:
所以,我使用了 IMap 并执行了“get”和“put”,如下所示:
//- 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 填充 map ?除了使用 IMap 之外还有其他更好的选择吗?
最佳答案
正如 @noctarius 提到的,如果您一定要使用 IMap,EntryListener 将是最好的方法。下面是 EntryListener 工作原理的示例。
您订阅并在添加条目时收到通知。然后你就可以激发你的逻辑了。
关于java - 一旦 map 被 Hazelcast 填充,就从 map 中获取一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36850155/