我遵循 CappedCollection 演示示例并获得了一个 Iteratee,它使用 Play 2.2 使用了一个上限集合并且没有任何问题。升级到 Play 2.3 后,我在尝试停止 Iteratee 时遇到了奇怪的问题。当播放关闭时,我连接到 onStop 并尝试停止 iteratee buy 调用运行,但无论等待什么,我总是遇到超时。这也发生在我使用 withApplication 的单元测试中。在升级到 play 2.3 和 reactivemongo/play2-reactive mongo"0.10.5.0.akka23" 之前,这一直是完美的。最初,我认为 Play 首先关闭 Akka 可能是一个问题,但我已经验证 ReactiveMongoPlugin 设置为 1200,应该在 Akka 之前关闭。
任何帮助将不胜感激谢谢!
Mongo 版本 2.6.3
Here is my setup code
//Some JSONCollection
collection
.find(Jons.obj())
.hint(Json.obj("$natural" -> 1))
.options(QueryOpts().tailable.awaitData)
.cursor[Model])
val enumerator = cursor.get.enumerate()
iteratee = Iteratee.flatten(enumerator |>> process())
}
//Iteratee returned for
def process(): Iteratee[Model, Unit] = {
Iteratee.foreach { model =>
//Do something with model class
process(model)
}
//Called by Global.onStop()
def stop(): Unit= {
val result = iteratee.run.andThen {
case r => saveIndex()
} andThen {
case Success(x) => Logger.info("Successful exit iteratee")
case Failure(ex) => Logger.error("", ex)
}
//This always times out on shutdown
Await.result(f, 10 seconds)
}
//例外
til.concurrent.TimeoutException: Futures timed out after [10 seconds]
at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219) ~[scala-library-2.11.1.jar:na]
at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223) ~[scala-library-2.11.1.jar:na]
at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:111) ~[scala-library-2.11.1.jar:na]
at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53) ~[scala-library-2.11.1.jar:na]
at scala.concurrent.Await$.result(package.scala:111) ~[scala-library-2.11.1.jar:na]