我是Hazelcast的新手,在我看来,我正在努力解决一个非常简单的问题,但无法解决问题。
我有这个场景,我有2个webservices,在一个服务器(第一个API)中,我必须得到一个值,该值将在使用第二个API的不同服务器5秒后填充,并且我只有一个referenceId在两个服务器之间识别/获取/填充值。换句话说,当使用和ID调用我的第一个Api时,它将返回被推送到具有该ID的第二个Api的内容。
此图表通过连接第一个和第二个API更好地展示了我想要解决的问题:
所以,我使用了一个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更好的选择吗?
答案 0 :(得分:2)
正如@noctarius所提到的,如果你一定想要使用IMap,那么EntryListener将是最好的方法。以下是EntryListener如何工作的示例。
您订阅并在添加条目时收到通知。然后你可以解雇你的逻辑。