我想将第二条消息作为新消息发送给Actor

时间:2017-08-14 08:42:01

标签: scala akka

我有两个演员,例如发件人:

class ActorSender(actroReciever: ActorRef) extends Actor{
  implicit val timeout = Timeout(100, TimeUnit.SECONDS)

  override def receive: Receive = {
    case "RUN" => {
      val resp = Await.result(actroReciever ? "Msg", 100.seconds)
      println("receive response " + resp)
    };
    case str:String => println(str)
    case _ => println("Error type msg")
  }
}

reciever:

class ActroReciever extends Actor{
  override def receive: Receive = {
    case str:String => {
      val snd = sender()
      snd ! "MessageFirst"
      snd ! "MessageSecond"
    }
  }
}

开始上课:

object Tester extends App {
  val system = ActorSystem("system")
  val receiver = system.actorOf(Props[ActroReciever](new ActroReciever()), "receiver")
  val sender = system.actorOf(Props[ActorSender](new ActorSender(receiver)), "sender")
  sender ! "RUN"
}

我想向发送方()发送两条消息,首先是回复"询问",第二条消息为"新消息",其中ActorSender执行为"匹配&# 34;,我怎么能这样做?感谢

1 个答案:

答案 0 :(得分:2)

首先,您知道不应该使用Await,对吧?

其次,ask?)并不打算在演员中使用。 ask创建一个只能接收单个消息的临时actor。这不是你的ActorSender接收答案,而是由ask创建的临时演员。这就是为什么你感觉你只能发一个答案。

您这样做是错误的,您只需使用actroReciever ! "Msg"发送消息即可。无需更改ActroReciever上的任何内容。