jobs_queue
MongoDBにコレクションがあります。これは、テーラブル カーソルを使用してポーリングしている上限付きコレクションです。
val cur =
jobsQueue
.find(Json.obj("done" -> Json.obj("$ne" -> true)))
.options(QueryOpts().tailable.awaitData)
.cursor[JsObject]
cur.enumerate() |>>> Iteratee.foreach { queuedDoc =>
// do some processing and store the results back in the DB
}
これは通常の Scala から呼び出されるApp
ため、Akka や Play のラッピングはまったくありません。
App
明示的に から抜け出すまで が終了しないようにする最も適切な方法はIteratee.foreach
何ですか? また、より単純な (多少エレガントでなくても) 方法があれば、play-iteratees をまったく使用する必要はありません。
PS 私はコレクションがキャップされていることを確認します:
val jobsQueueMaybe = db.collection[JSONCollection]("jobs_queue")
val jobsQueue: JSONCollection =
jobsQueueMaybe.stats()
.flatMap {
case stats if !stats.capped =>
jobsQueueMaybe.convertToCapped(size = 1024 * 1024, maxDocuments = None)
case _ =>
Future(jobsQueueMaybe)
}
.recover { case _ => jobsQueueMaybe.createCapped(size = 1024 * 1024, maxDocuments = None) }
.map { _ => jobsQueueMaybe }
PPS
また、このビットのロジックをどのように設計したか、およびアプローチを再考して実装を少し見直すことでこれを解決する方法についての批判も歓迎します。