我有两个演员,例如发件人:
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;,我怎么能这样做?感谢
答案 0 :(得分:2)
首先,您知道不应该使用Await
,对吧?
其次,ask
(?
)并不打算在演员中使用。 ask
创建一个只能接收单个消息的临时actor。这不是你的ActorSender
接收答案,而是由ask创建的临时演员。这就是为什么你感觉你只能发一个答案。
您这样做是错误的,您只需使用actroReciever ! "Msg"
发送消息即可。无需更改ActroReciever
上的任何内容。