【发布时间】:2017-01-24 01:24:34
【问题描述】:
我想避免向已终止的演员发送死信消息,并避免向该演员发送消息
class PingActor extends Actor with ActorLogging {
import PingActor._
var counter = 0
var sendMessages = true
val pongActor = context.actorOf(PongActor.props, "pongActor")
context.watch(pongActor)
def receive = {
case Terminated(pong) =>
sendMessages = false
case Initialize =>
println("In PingActor - starting ping-pong")
pongActor ! PingMessage("ping")
case PongActor.PongMessage(text) =>
println("In PingActor - received message: {}", text)
counter += 1
if (counter == 10 ) context.system.shutdown()
else {
context.actorSelection(pongActor.path) ! PingMessage("ping")
}
}
}
class PongActor extends Actor with ActorLogging {
import PongActor._
var counter = 0
def receive = {
case PingActor.PingMessage(text) =>
println(s"In PongActor - received message: $text counter = $counter \n reply with pong message")
if (counter < 5) {
counter = counter + 1
}
else
{
println("Oh crap , bye bye ")
context.stop(self)
}
sender() ! PongMessage("pong")
}
actorSelection 没有像我预期的那样工作,并且从 ping 发送的最后一条消息仍然以死信结束:
[信息] [09/16/2016 00:47:46.237] [MyActorSystem-akka.actor.default-dispatcher-4] [akka://MyActorSystem/user/pingActor/pongActor] 消息 [com.example.PingActor$PingMessage] 来自 演员[akka://MyActorSystem/user/pingActor#1697177867] 到 Actor[akka://MyActorSystem/user/pingActor/pongActor#524615423] 不是 发表。 [1] 遇到死信。这个日志记录可以转 关闭或使用配置设置“akka.log-dead-letters”进行调整 和'akka.log-dead-letters-during-shutdown'。
【问题讨论】: