2016-06-16 11 views
1

Ich muss hier etwas falsch verstehen. Die docs sagen, dass die Standard-Mailbox soll unbegrenzt sein, aber nur um sicherzugehen ich explizite Konfiguration hinzugefügt:Akka Unbounded Mailbox scheint begrenzt zu sein

akka.actor.default-mailbox { 
    mailbox-type = "akka.dispatch.UnboundedMailbox" 
} 

Doch wenn ich 50 Nachrichten abfeuern wie folgt:

1 to 50 foreach { _ => 
    myActorRef ! "myMessage" 
} 

ich 15 über Fehler:

ActorRefSourceActor - Dropping the new element because buffer is full and overflowStrategy is: [DropNew] 

Was ist hier los?

EDIT:

@cmbaxter - Danke, du hast recht, ich über den Code ein wenig vereinfacht zu viel nicht zu realisieren, welcher Teil tatsächlich gebrochen war. Die fehlenden Stücke von Informationen waren:

  • myActorRef bezieht sich eigentlich auf einen WebSocket Schauspieler Setup als here in der Play-Dokumentation beschrieben. Was Sie erwähnt haben, verwendet einen ActorFlow.
  • Die Nachricht an myActorRef ist nicht das Problem, aber es wiederum schreibt an den WebSocket, wo das Problem tatsächlich liegt.
+2

Ich glaube, Sie einige Details hier verstecken. Es scheint, dass Sie Akka Streams verwenden und Ihren Akteur als 'Quelle' behandeln. Stream-Komponenten können keine unbegrenzte Pufferung haben und benötigen eine Strategie, wenn der Downstream-Druck beginnt, wie Sie hier sehen. Dies hat nichts mit der Mailbox-Beschränkung zu tun – cmbaxter

Antwort

0

Jetzt, wo ich verstehe, woher es kommt, war die Lösung ziemlich trivial. I erhöht nur die Puffergröße des ActorFlow, die normalerweise auf 16 default würde, zum Beispiel:

ActorFlow.actorRef(MyActor.props(), 10000)