Scala 斯卡拉·阿克卡演员”;“遇到死信”;
我正在Scala中测试我的actor系统,以获取我正在编写的一段代码,当我试图向另一个actor发送消息时,遇到了问题 在watcher类中,我运行以下代码: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
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方法中添加一个条目到handlerTerminated(poller)
消息中,以防您的poller因为您看不到的原因而死亡。您能在这里为PocCommander
和PocPollerCrow
共享代码吗?需要了解这一点才能诊断问题。遇到死信意味着参与者正在发送消息,但没有人在那里接收消息。这可能有很多原因,但很可能是因为这些参与者正在发送一条类似于sender!“response”
但由于您不是从参与者处启动它们,因此没有代码来接收消息。建议您添加ActorLogging特性,并添加一些日志语句,以便更轻松地了解正在发生的事情。同时向指挥官添加context.watch(poller)
,并在指挥官的receive方法中向handlerTerminated(poller)
消息添加一个条目,以防你的轮询器因你看不到的原因而死亡。