Ich habe einen Spray-basierten HTTP-Service. Ich habe einen Stream, der innerhalb dieser HTTP-Anwendung läuft. Da dieser Stream viele I/O-Vorgänge ausführt, entschied ich mich für einen separaten Thread-Pool. Ich habe die Akka-Dokumentation nachgeschlagen, um zu sehen, was ich tun kann, damit mein Thread-Pool konfigurierbar ist. Ich bin auf das Dispatcher-Konzept in Akka gestoßen. Also habe ich versucht, es zu benutzen, wie unten in meinem application.conf:Verwendung von Akka Dispatchern für die Handhabung von Futures
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
}
}
In meinem Schauspieler, habe ich versucht, diese Konfiguration nachzuschlagen als:
context.system.dispatchers.lookup("akka.io-dispatcher")
Als ich meinen Dienst lief, erhalte ich die folgende Fehler:
[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)
Meine Fragen sind:
Ist dieser io-dispatcher Thread-Pool, den ich erstelle, beabsichtigt, nur für Actors verwendet zu werden? Meine Absicht war, diesen Thread-Pool für meine Streams zu verwenden, der von einem der Actors instanziiert wird. Ich gebe diesen Thread-Pool dann an meinen Stream weiter.
Wie könnte ich einen ExecutionContext erstellen, indem ich einfach den Dispatcher aus der application.conf lade? Sollte ich eine bestimmte Bibliothek verwenden, die meine Konfiguration für den Thread-Pool liest und mir einen ExecutionContext gibt?