我正在通过一些基本的例子来学习和理解Akka演员模型。
我为同一个Actor创建了两个实例(即)" helloworld1"和" helloworld2"并向该Actor发送消息。第一条消息由实例发送" helloworld1"第二条消息由" helloworld2"发送。
当我运行以下代码时,我得到如下输出
Yes you made it Hi helloworld2
Yes you made it Hi helloworld1
我的问题是为什么第一条消息首先被处理?我期待输出如下所示,因为第一条消息是由helloworld1发送的
Yes you made it Hi helloworld1
Yes you made it Hi helloworld2
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
}
}
演员代码:
import akka.actor.Actor
class HelloWorld extends Actor {
def receive = {
case dataStr:String => println("Yes you made it "+dataStr)
}
}
答案 0 :(得分:1)
Akka不保证邮件按照全局发送的顺序传递。它保证以下内容:
所以你看,订单只保证给任何给定的发送者 - 接收者对。如果您从“helloworld1”发送多条消息,它们将按您发送的顺序收到(但其他来源的消息可能介于两者之间)。
有关详细说明,请参阅the documentation。