2017-08-14 94 views
-2

我有两个演员,例如,发件人:我要发送第二消息,演员为新的消息

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" 
} 

我想向sender()发送两条消息,首先作为“ask”的回复,第二个msg作为“new Message”,ActorSender作为“匹配”执行,我怎么能做到这一点?谢谢

回答

2

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

其次,ask?)并不意味着在演员中使用。 ask创建一个只能接收单个消息的临时演员。这不是你的ActorSender收到答案,而是由问题创建的临时演员。这就是为什么你有这种感觉,你只能发送1个答案。

你这样做是错误的,你应该简单地使用actroReciever ! "Msg"发送消息。无需在您的ActroReciever上更改任何内容。