1
私はthisアプリケーションをAkka StreamsとReactiveMongoを使用しています。ユーザー定義のアクターはありません。アプリケーションはmain
メソッドから起動されます。メインメソッドからAkkaアクターシステムを終了するにはどうすればいいですか?
main
メソッドが完了した後も、JVMは永久に実行されます。 this、その作品のどれも
val g = (file: String) => RunnableGraph.fromGraph(GraphDSL.create(Sink.ignore) {
implicit builder =>
sink =>
import GraphDSL.Implicits._
// Source
val A: Outlet[(String, String)] = builder.add(Source.fromIterator(() => parseMovies(file).iterator)).out
// Flow
val B: FlowShape[(String, String), Either[String, Movie]] = builder.add(findMovie)
// Flow
val C: FlowShape[Either[String, Movie], Option[String]] = builder.add(persistMovie)
A ~> B ~> C ~> sink.in
ClosedShape
})
def main(args: Array[String]): Unit = {
require(args.size >= 1, "Path to file is required.")
g(args(0)).run
.onComplete(_ => Await.result(system.terminate(), 5.seconds))
}
私が読んだthisスレッドを、そして:これは私が今やっているものです。 system.shutdown
は推奨されておらず、私には明らかな俳優はありません。私はsystem.exit
と呼ぶことができますが、それはほとんど優雅です。
ログからは、Akkaがシャットダウンしようとしていますが、次にMongoのメッセージがたくさん表示されているようです。 it.just.die
2017-01-13 11:35:57.320 [DEBUG] a.e.EventStream.$anonfun$applyOrElse$4 - shutting down: StandardOutLogger started
2017-01-13 11:36:05.397 [DEBUG] r.c.a.MongoDBSystem.debug - [Supervisor-1/Connection-2] ConnectAll Job running... Status: {{NodeSet None Node[localhost:27017: Primary (10/10 available connections), latency=6], auth=Set() }}
2017-01-13 11:36:05.420 [DEBUG] r.c.a.MongoDBSystem.debug - [Supervisor-1/Connection-2] RefreshAll Job running... Status: {{NodeSet None Node[localhost:27017: Primary (10/10 available connections), latency=6], auth=Set() }}
// more of MongoDBSystem.debug messages
なぜだろうではない?
私はあなたがシャットダウンフックを追加したり、actorSystem.registerOnTermination(driver.close())
を呼び出したいと思います
それは、独自の基盤となるアクターシステムを管理していますとあなたは、あなたがすべきことはない(できない)に直接アクセスし、適切に 'MongoDriver'を閉じる必要があります – cchantep
@cchantepもっと具体的にするか、コード例を表示できますか? Mongo接続を閉じることは役に立たなかった。 –
「MongoConnection」ではなく「MongoDriver」と丁寧にお読みになりましたら – cchantep