2016-10-08 4 views
1

Ich lerne und verstehe Akka Schauspieler Modell mit einigen grundlegenden Beispielen.Akka Schauspieler verarbeitet die zweite Nachricht vor der Verarbeitung der ersten Nachricht

Ich erstellte zwei Instanzen für einen gleichen Akteur (d. H. "Helloworld1" und "helloworld2" und Senden von Nachrichten an diesen Akteur. Die erste Nachricht wird von der Instanz "helloworld1" und die zweite Nachricht von "helloworld2" gesendet.

Wenn ich laufe den Code unten i Ausgang erhalten, wie unten

Yes you made it Hi helloworld2 
Yes you made it Hi helloworld1 

Meine Frage ist, warum ist es die zweite Nachricht zuerst verarbeitet wird? Ich hatte erwartet, die Ausgabe als unten, weil die erste Nachricht von HelloWorld1 gesendet wird

Yes you made it Hi helloworld1 
Yes you made it Hi helloworld2 

-Code für ActorApp:

import akka.actor.{ActorSystem, Props} 

object ActorApp { 

def main(args :Array[String]) ={ 

val system = ActorSystem("SimpleActorSystem") 

val actorObj1 = system.actorOf(Props[HelloWorld],"helloworld1") 
actorObj1 ! "Hi helloworld1"//first message sent 

val actorObj2 =system.actorOf(Props[HelloWorld],"helloworld2") 
actorObj2 ! "Hi helloworld2"//second message sent 

} 

} 

-Code für Schauspieler:

import akka.actor.Actor 

class HelloWorld extends Actor { 

def receive = { 

case dataStr:String => println("Yes you made it "+dataStr) 

} 

} 
+0

Die Reihenfolge der Nachrichten wird im selben Akteur garantiert, nicht zwischen den Akteuren –

Antwort

1

Akka tut Sie können nicht garantieren, dass Nachrichten in der Reihenfolge gesendet werden, in der sie global gesendet werden. Es garantiert die folgende:

  • at-most-once Lieferung (dh keine garantierte Lieferung, Nachrichten gelöscht werden können)
  • Nachrichtenordnung pro Sender-Empfänger-Paar

So Sie, die Bestellung zu sehen ist nur für ein bestimmtes Sender-Empfänger-Paar garantiert. Wenn Sie mehrere Nachrichten von "helloworld1" senden, werden sie in der Reihenfolge empfangen, in der Sie sie gesendet haben (es können jedoch Nachrichten von anderen Quellen dazwischen kommen).

Eine ausführliche Erläuterung finden Sie unter the documentation.

Verwandte Themen