死信在发送消息时遇到错误

问题描述 投票:0回答:2

我是新手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

}
scala actor
2个回答
1
投票

我不确定为什么会产生死信。但问题模式的简单实现是

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


0
投票

请提供完整的输出,以便我们可以试着看看究竟发生了什么。

死信表示您要发送邮件的actor无法访问:邮件丢失。

首先要注意:sender取决于收到的最后一条消息的上下文。它不是一个值而是一个函数(每次收到消息时它都会改变)。所以请使用sender()而不是sender

第二个注意事项:您尝试实现的目标称为问题模式,而akka为此提供了便利。你应该看看the documentation

© www.soinside.com 2019 - 2024. All rights reserved.