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

问题描述 投票:3回答:1

这是我的关键任务应用程序中的场景: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,直到它成功为止。

akka lookup actor sender
1个回答
3
投票

Answer 1:

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

Answer 2:

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

一般来说,我建议阅读message delivery guarantees上的文档,特别是在实现关键任务应用程序之前。

© www.soinside.com 2019 - 2024. All rights reserved.