Java 使用Hazelcast填充贴图后,从该贴图中获取值

Java 使用Hazelcast填充贴图后,从该贴图中获取值,java,hazelcast,hazelcast-imap,Java,Hazelcast,Hazelcast Imap,我是Hazelcast的新手,在我看来,我正在努力解决一个相当简单的问题,但无法解决它 我有这个场景,我有两个Web服务,其中在一个服务器(第一个API)中,我必须使用第二个API从另一个服务器获取一个5秒后将要填充的值,并且我在两个服务器之间只有一个referenceId来标识/获取/填充值。换句话说,当使用和ID调用我的第一个Api时,它将返回推送到具有该ID的第二个Api的内容 此图更好地显示了我希望通过连接第一个和第二个API来解决的问题: 因此,我使用了IMap并进行了如下“获取”和

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

我有这个场景,我有两个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);
//- Second API -//
String refId = captureRefId(YYYY)
IMap<Integer, String> map = hazelcastInstance.getMap("ResponseMap");
map.put(refId, YYYY);
/-第一个API-//
整数referenceId=XXXX;//进入第二步
IMap map=hazelcastInstance.getMap(“ResponseMap”);
线程。睡眠(5000);//在这里睡觉是个好办法,但这是最糟糕的表演
字符串strResponse=map.get(referenceId);
另一方面,另一台服务器将在最多5秒钟后放入数据,如下所示:

//- 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);
//- Second API -//
String refId = captureRefId(YYYY)
IMap<Integer, String> map = hazelcastInstance.getMap("ResponseMap");
map.put(refId, YYYY);
/-第二个API-//
字符串refId=capturefid(YYYY)
IMap map=hazelcastInstance.getMap(“ResponseMap”);
映射放置(refId,YYYY);
问题是map.get总是返回null,因为此时该值不存在,但是如果我添加
sleep(5)
一切正常


我的问题是,在另一台服务器用该特定id填充映射之前,如何才能阻止
map.get(referenceId)
?还有比使用IMap更好的选择吗?

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


您订阅并在添加条目时收到通知。然后您可以启动您的逻辑。

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


您订阅并在添加条目时收到通知。然后你可以启动你的逻辑。

一个只有几毫秒等待时间的投票循环难道不能解决这个问题吗?我不确定我是否完全理解你的问题。IMap没有这样的阻塞操作,也许IQueue可以更好地解决它,但这取决于您真正想要实现的目标。也许你可以进一步解释。@noctarius谢谢你的评论。我用图表更新了我的问题。它更好地显示了我的问题,我想让
1st-API
等待执行
2nd-API
,并填充数据。不过,轮询不能解决问题吗?另一种选择是映射侦听器?@noctarius我对HZ很陌生,所以从未使用过轮询或映射侦听器。你能给我指一个样品吗?或者实际上有一个答案?顺便说一句,你说的投票是指伊奎吗?我正在调查一个映射侦听器,但没有找到如何通过引用Id连接数据(请记住,第二个API存在于多个服务器中。如果没有轮询循环,只需几毫秒的等待时间,则无法解决此问题?我不确定是否完全理解您的问题。IMap没有这样的阻塞操作,也许IQueue可以更好地解决此问题,但这取决于您真正想要实现的目标。也许您可以进一步详细说明。@noctarius谢谢你的评论。我已经用一个图表更新了我的问题。它更好地显示了我的问题,我想让
1st API
等待
2nd API
执行并填充数据。但是,轮询没有解决问题吗?作为替代,映射侦听器?@noctarius我对HZ很陌生,所以从来没有使用过轮询或映射监听器。你能给我指一个示例吗?或者你能给出一个答案吗?顺便说一句,你说的轮询是指IQueue吗?我在调查一个映射监听器,但没有找到如何通过引用Id连接数据(请记住,第二个API存在于多台服务器中。您是否有机会评估答案?如前所述,使用IMap是唯一的方法。您是否有机会评估答案?如前所述,使用IMap是唯一的方法。