在一个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代码是否执行的最佳方法是什么,如果是这样的话,阻止它进一步发展?
如果你的 Actor 死亡,那么 Actor 中的任何代码都不会运行。
您可以使用actorSelection检查特定的 actor 是否可用,然后向结果返回的任何内容发送消息(如果什么都没有,则不会发送消息)。
ActorContext.actorSelection(<your-actor-name>) ! someMessage
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7358 次 |
| 最近记录: |