getAsync(“key”)。get(timeout,sec)不等待,返回null

时间:2015-08-12 20:27:15

标签: java scala hazelcast

Hazelcast 3.4.4。 无论如何,当map.getAsync返回null时,我遇到了一种情况。即使超时设置为10000000TimeUnit.SECONDS它也不会等待。

但是如果我在getAsync之前放置Thread.sleep(10000),那么它会从地图返回正确的值。

我想知道出了什么问题以及如何检查/修复/低估它?

更新 :如果我从代码和所有依赖项(如import ExecutionContext.Implicit.global)中删除Scala.concurent.Future,则getAsync将再次开始工作。但我还是不满意......

2 个答案:

答案 0 :(得分:2)

对我来说,感觉就像你期望它等到一个值被放入地图中,不是吗?

这并不意味着它会等到一个值可用,它只是让你选择在群集完全耗尽的情况下超时,并且无法足够快地回答你的请求。

我实际上认为没有好的方法可以实现您正在寻找的东西但是您可以使用本地EntryListeners,等待密钥并通过主题转发事件,如果这有意义的话。您可能还需要Promise类型的实现。

答案 1 :(得分:0)

不确定它是否是3.4.4的问题,但3.5.1适用(来自REPL):

scala> import scala.concurrent._
import scala.concurrent._

scala> import ExecutionContext.Implicits.global
import ExecutionContext.Implicits.global

scala> val map = hz.getMap[String, Int]("map")
map: com.hazelcast.core.IMap[String,Int] = IMap{name='map'}

scala> map.set("one", 1)

scala> map.getAsync("one").get()
res4: Int = 1