2016-05-03 7 views
0

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:

  1. 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.

  2. 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?

Antwort

1

Die Konfiguration ist korrekt. Alles, was Sie tun müssen, ist, die geladene Konfigurationsdatei an das Akka ActorSystem zu übergeben, wie zum Beispiel:

ActorSystem("yourActorSystem", ConfigFactory.load()) 
Verwandte Themen