【问题标题】:Multiple ways to communicate with Akka Actor from outside the system?从系统外部与 Akka Actor 通信的多种方式?
【发布时间】:2015-07-24 14:16:53
【问题描述】:

我的印象是,与 外部 ActorSystem 的 Akka Actor 交流的唯一方法是通过 Inbox。但是我刚刚发现this snippet from Akka's own documentation 显示:

greeter.tell(new WhoToGreet("akka"), ActorRef.noSender());
inbox.send(greeter, new Greet());

那是什么?实际上是否可以直接tell 外部世界的 Actor,或者 Typesafe 有一个粗心的实习生为他们写文档?!?

如果可能,那么你应该什么时候这样做,什么时候应该使用Inbox 例如,一种方法是“即发即弃”异步/非阻塞和其他同步/阻塞?

【问题讨论】:

    标签: java akka actor


    【解决方案1】:

    Inboxrelatively recent Actor DSL API 的一部分,它是“在创建 Actor 的常用方法之上的一些不错的糖”。您可以使用标准方式创建/与参与者通信,也可以使用Actor DSL。它们都是异步的。 Actor DSL 非常适合创建其生命周期是一种方法的一次性 Actor。 DSL 语法的优势在 Scala 中更加明显。

    【讨论】:

    • 感谢@sourcedelica (+1) - 但Inbox 是哪种方法? Inbox 是 Actor DSL 还是 Inbox 是“标准”方式?再次感谢!
    • 抱歉 - Inbox 是 Actor DSL 的一部分。我已经在 Scala 参考手册中澄清并添加了指向 Actor DSL 页面的链接。 Java参考手册中好像没有对应的页面。
    【解决方案2】:

    您可以安全地从参与者外部发送消息。 Akka 将填写一个虚拟发件人。您将无法收到任何回复(尽管您可以为此使用 ask)。

    【讨论】:

    • 谢谢@Ryan,但这并不能回答我的问题。我的问题是何时何地使用这两种方法......
    • 在不了解您的用例的情况下,没有人可以回答这个问题。
    • 我非常怀疑! @Ryan,我确定有合适的时间使用greeter.tell(new WhoToGreet("akka"), ActorRef.noSender()); 而不是 inbox.send(greeter, new Greet());,反之亦然!
    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2012-11-30
    • 2013-02-06
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多