【发布时间】:2016-04-25 20:11:44
【问题描述】:
我是 Hazelcast 的新手,在我看来,我正在努力解决一个非常简单的问题,但无法解决它。
我有这种情况,我有 2 个 web 服务,在一个服务器(第一个 API)中,我必须使用第二个 API 从不同的服务器获取一个将在 5 秒后填充的值,并且我只有一个 referenceId在两个服务器之间识别/获取/填充值。换句话说,当我的第一个 Api 使用 ID 调用时,它将返回推送到具有该 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 更好的选择吗?
【问题讨论】:
-
轮询循环不会有几毫秒的等待时间来解决问题吗?不确定我是否完全理解您的问题/问题。 IMap 没有这样的阻塞操作,也许 IQueue 会更好地解决它,但这取决于您真正想要实现的目标。也许您可以进一步详细说明。
-
@noctarius 感谢您的评论。我用图表更新了我的问题。它更好地显示了我的问题,我想让
1st API等待2nd API被执行并填充数据。 -
仍然,轮询不能解决问题吗?作为替代方案,地图侦听器?
-
@noctarius 我对 HZ 很陌生,所以从来没有使用过轮询或地图监听器。你能给我指个样本吗?或者实际上有答案?顺便说一句,轮询是指 IQueue 吗?我正在调查地图侦听器,但没有找到如何通过参考 ID 连接数据(请记住,第二个 API 存在于多个服务器中
标签: java hazelcast hazelcast-imap