java - 一旦 map 被 Hazelcast 填充,就从 map 中获取一个值

标签 java hazelcast hazelcast-imap

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

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

此图更好地显示了我想要通过连接第一个和第二个 API 来解决的问题: enter image description here

所以,我使用了 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 工作原理的示例。

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

您订阅并在添加条目时收到通知。然后你就可以激发你的逻辑了。

关于java - 一旦 map 被 Hazelcast 填充,就从 map 中获取一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36850155/

相关文章:

java - 推荐用于 Google App Engine 的 Java 框架?

java - 获取电子邮件客户端不支持通过 Java 发送电子邮件的 HTML 消息

java - Swagger、jersey、jax-rs、嵌入式jetty配置问题

java - Hazelcast:如何从 map 获取缓存时检测网络故障

java - Hazelcast - 客户端模式 - 集群故障后如何恢复?

java - 如何创建自己的自定义谓词来比较 hazelcast 中的复合 id

java - “Cannot find symbol”或 “Cannot resolve symbol”错误是什么意思?

docker - Elastic Beanstalk docker 内的榛子广播集群

spring-boot - 中型数据项目需要选择哪个分布式数据库

java - vertx-x3 集群多个顶点