Scala 斯卡拉·阿克卡演员”;“遇到死信”;

Scala 斯卡拉·阿克卡演员”;“遇到死信”;,scala,akka,Scala,Akka,我正在Scala中测试我的actor系统,以获取我正在编写的一段代码,当我试图向另一个actor发送消息时,遇到了问题 在watcher类中,我运行以下代码: val commander = system.actorOf(PocCommander.props) commander ! START 在PocCommander类中,我有: val poller = context.actorOf(PocPollerCrow.props, name = "poller-crow") poller

我正在Scala中测试我的actor系统,以获取我正在编写的一段代码,当我试图向另一个actor发送消息时,遇到了问题

在watcher类中,我运行以下代码:

 val commander = system.actorOf(PocCommander.props)
 commander ! START
在PocCommander类中,我有:

val poller = context.actorOf(PocPollerCrow.props, name = "poller-crow")
poller ! "start"
我可以确认commander成功地接收到枚举启动,当我在intelliJ中调试时,我可以看到正在创建轮询器。但是,我收到以下错误消息:

[信息][07/30/2015 10:26:53.797][MySpec akka.actor.default-dispatcher-4][akka://MySpec/user/poller-crow]来自Actor的消息[java.lang.String][akka://MySpec/user/$a#1512757569]给演员[akka://MySpec/user/poller-crow#-130904114]未交付。[1] 遇到死信

编辑:根据要求,输入crow代码

class PocPollerCrow extends BaseCrow {

  override def receive: Receive = {
    case "start" => println("yay")
    case _ => println("nay")
  }
object PocPollerCrow {
  val props = Props[PocPollerCrow]
}
和指挥官接收代码:

override def receive: Receive = {
case START =>
  println("got something yo -> " + START.toString)
  start()
case _ =>
}

我还删除了关闭ActorSystem的代码,因此我不再遇到这个问题。我想问题是我给一个参与者发送了一条消息,然后很快就关闭了系统。

你能在这里为
PocCommander
PocPollerCrow
共享代码吗?需要了解这一点才能诊断问题。遇到死信意味着参与者正在发送消息,但没有人在那里接收消息。这可能有很多原因,但很可能是因为这些参与者正在发送一条类似于
sender!“response”
但由于您不是从参与者处启动它们,因此没有代码来接收消息。建议您添加ActorLogging特性,并添加一些日志语句,以便更轻松地了解正在发生的事情。同时添加
context.watch(poller)
到commander,并在commander的receive方法中添加一个条目到handler
Terminated(poller)
消息中,以防您的poller因为您看不到的原因而死亡。您能在这里为
PocCommander
PocPollerCrow
共享代码吗?需要了解这一点才能诊断问题。遇到死信意味着参与者正在发送消息,但没有人在那里接收消息。这可能有很多原因,但很可能是因为这些参与者正在发送一条类似于
sender!“response”
但由于您不是从参与者处启动它们,因此没有代码来接收消息。建议您添加ActorLogging特性,并添加一些日志语句,以便更轻松地了解正在发生的事情。同时向指挥官添加
context.watch(poller)
,并在指挥官的receive方法中向handler
Terminated(poller)
消息添加一个条目,以防你的轮询器因你看不到的原因而死亡。