スプレー ベースの HTTP サービスがあります。この HTTP アプリケーション内で実行されるストリームがあります。このストリームは多くの I/O を行うため、別のスレッド プールを使用することにしました。Akka のドキュメントを調べて、スレッド プールを構成可能にするために何ができるかを確認しました。Akka で Dispatcher の概念に出くわしました。だから私は私のapplication.confで以下のようにそれを使用しようとしました:
akka {
io-dispatcher {
# Dispatcher is the name of the event-based dispatcher
type = Dispatcher
# What kind of ExecutionService to use
executor = "fork-join-executor"
# Configuration for the fork join pool
fork-join-executor {
# Min number of threads to cap factor-based parallelism number to
parallelism-min = 2
# Parallelism (threads) ... ceil(available processors * factor)
parallelism-factor = 2.0
# Max number of threads to cap factor-based parallelism number to
parallelism-max = 10
}
# Throughput defines the maximum number of messages to be
# processed per actor before the thread jumps to the next actor.
# Set to 1 for as fair as possible.
throughput = 20
}
}
私のアクターでは、この構成を次のように検索しようとしました。
context.system.dispatchers.lookup("akka.io-dispatcher")
サービスを実行すると、次のエラーが発生します。
[ERROR] [05/03/2016 12:59:08.673] [my-app-akka.actor.default-dispatcher-2] [akka://my-app/user/myAppSupervisorActor] Dispatcher [akka.io-dispatcher] not configured
akka.ConfigurationException: Dispatcher [akka.io-dispatcher] not configured
at akka.dispatch.Dispatchers.lookupConfigurator(Dispatchers.scala:99)
at akka.dispatch.Dispatchers.lookup(Dispatchers.scala:81)
私の質問は次のとおりです。
私が作成したこの io-dispatcher スレッド プールは、アクターのみに使用されることを意図したものですか? 私の意図は、アクタの 1 つによってインスタンス化されるストリームにこのスレッド プールを使用することでした。次に、このスレッド プールを自分のストリームに渡します。
application.conf からディスパッチャーをロードするだけで ExecutionContext を作成するにはどうすればよいですか? スレッド プールの構成を読み取り、ExecutionContext を提供する特定のライブラリを使用する必要がありますか?