Akka actor在处理第一条消息之前处理第二条消息

时间:2016-10-08 18:44:51

标签: scala akka

我正在通过一些基本的例子来学习和理解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)

}

}

1 个答案:

答案 0 :(得分:1)

Akka不保证邮件按照全局发送的顺序传递。它保证以下内容:

  • 最多一次交付(即无保证交付,可能会丢弃消息)
  • 每个发送者 - 接收者对的消息排序

所以你看,订单只保证给任何给定的发送者 - 接收者对。如果您从“helloworld1”发送多条消息,它们将按您发送的顺序收到(但其他来源的消息可能介于两者之间)。

有关详细说明,请参阅the documentation