如何告诉akka actor成功向其他actor的邮箱发送消息?

时间:2013-02-03 05:21:30

标签: akka lookup actor sender

这是我的关键任务应用程序中的场景: Actor A执行一些资源紧张的工作,然后在另一个物理unix框上向actor B发送一条消息。 B正在访问外部网络元素,并且可能需要很长时间来处理该消息。然后B将处理结果发送回A。

Q1:A使用B的路径查找B.如果B的unix框已关闭或B尚未启动,则查找将失败。 akka doc说回复了像演员引用这样的死信。我如何测试它是一个普通的演员参考或死信式的演员参考返回?

Q2:假设B的正常actor ref返回。如果A使用B.tell()将msg发送到B并且msg无法到达B的邮箱,这是持久性的,我怎么知道它发生了以便A可以将msg发送给具有持久邮箱的本地actor C. C将尝试永久地将消息传递给B,直到成功为止。

1 个答案:

答案 0 :(得分:3)

答案1:

system.actorFor(someRemotePath)总是给你一个远程演员参考,并且没有办法通过检查这个参考来确定它指向的演员是否存在或者是否可以到达。找出该给定URI是否有演员的唯一方法是发送消息:如果你得到答复,那么它是活着的,如果在一段合理的时间之后没有回复你必须假设它已经关闭和/或者重试 - 尽管由于防火墙重启或其他原因,很可能发生了回复消息丢失的情况。

答案2:

你的演员C是你所有问题的解决方案:你需要总是发送给C并让它确保消息最终被远程actor确认。无法在Akka中找出给定邮件是否已传送到邮箱,因为这并不意味着演员无论如何都能成功处理邮件。

一般情况下,我建议您阅读message delivery guarantees上的文档,特别是在实施关键任务应用程序之前。