检查Scala/Akka actor是否被终止

tic*_*fab 8 scala actor akka

在一个actor中执行代码时,我需要检查actor是否还活着.这是可取的还是有更好的方法?

if (self != akka.actor.DeadLetter) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑 - -

感谢您的所有投入.会发生什么是以下情况.我正在使用Play.当我的演员开始时,在传入请求时,会安排超时.

Promise.timeout({
     Logger.info(s"$self, timeout expired")
     // do something
}, timeoutValue)
Run Code Online (Sandbox Code Playgroud)

有时,在超时到期之前,actor会因其他原因而停止(例如,客户端断开连接).在那种情况下,我在日志中看到的是

Actor[akka://application/deadLetters], timeout expired.
Run Code Online (Sandbox Code Playgroud)

据我所知,这意味着默认的deadLettersactor正在执行该代码.所以我的问题是:在演员终止后检查Promise代码是否执行的最佳方法是什么,如果是这样的话,阻止它进一步发展?

Ash*_*ynd 1

如果你的 Actor 死亡,那么 Actor 中的任何代码都不会运行。

您可以使用actorSelection检查特定的 actor 是否可用,然后向结果返回的任何内容发送消息(如果什么都没有,则不会发送消息)。

ActorContext.actorSelection(<your-actor-name>) ! someMessage
Run Code Online (Sandbox Code Playgroud)