我是新手Actors正在尝试它们但我得到这个例外我不明白为什么我得到它
object AskPattern extends App{
case object AskName
class Name extends Actor{
override def receive: Receive = {
case AskName => sender ! "Helmy"
case s : String => println(s)
}
}
val systemActor = ActorSystem("AskPattern")
val actor1 = systemActor.actorOf(Props[Name],"Umair")
val actor2 = systemActor.actorOf(Props[Name],"Farooq")
actor2 ! AskName
}
我不确定为什么会产生死信。但问题模式的简单实现是
import akka.actor.{Actor, ActorSystem, Props}
import akka.pattern.ask
import akka.util.Timeout
import scala.concurrent.ExecutionContext.Implicits.global
object AskPattern extends App {
case object AskName
class Name extends Actor{
override def receive: Receive = {
case AskName => sender ! "Helmy"
case s : String => println(s)
}
}
implicit val timeout: akka.util.Timeout = Timeout.apply(1,java.util.concurrent.TimeUnit.SECONDS)
val systemActor = ActorSystem("AskPattern")
val actor1 = systemActor.actorOf(Props[Name],"Umair")
val actor2 = systemActor.actorOf(Props[Name],"Farooq")
actor2 ? AskName map { x => println(s"Resolved future $x") }
}
这是一个demo
请提供完整的输出,以便我们可以试着看看究竟发生了什么。
死信表示您要发送邮件的actor无法访问:邮件丢失。
首先要注意:sender
取决于收到的最后一条消息的上下文。它不是一个值而是一个函数(每次收到消息时它都会改变)。所以请使用sender()
而不是sender
。
第二个注意事项:您尝试实现的目标称为问题模式,而akka为此提供了便利。你应该看看the documentation。