从系统外部与 Akka Actor 通信的多种方式?
Multiple ways to communicate with Akka Actor from outside the system?
我的印象是,从 外部 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
?比如,是一种方法"fire-and-forget"asynchronous/non-blocking 和另一个 synchronous/blocking?
您可以安全地从 actor 外部发送消息。 Akka 将填写一个虚拟发件人。您将无法收到任何回复(尽管您可以为此使用 ask
)。
Inbox
是 relatively recent Actor DSL API that is "some nice sugar on top of the usual ways to create actors". You can either use the standard way to create / communicate with actors or use the Actor DSL 的一部分。它们都是异步的。 Actor DSL 非常适合创建生命周期为一种方法的一次性 actor。 DSL语法的优势在Scala中表现的更明显一些。
我的印象是,从 外部 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
?比如,是一种方法"fire-and-forget"asynchronous/non-blocking 和另一个 synchronous/blocking?
您可以安全地从 actor 外部发送消息。 Akka 将填写一个虚拟发件人。您将无法收到任何回复(尽管您可以为此使用 ask
)。
Inbox
是 relatively recent Actor DSL API that is "some nice sugar on top of the usual ways to create actors". You can either use the standard way to create / communicate with actors or use the Actor DSL 的一部分。它们都是异步的。 Actor DSL 非常适合创建生命周期为一种方法的一次性 actor。 DSL语法的优势在Scala中表现的更明显一些。