在Akka询问模式

时间:2017-09-06 14:21:37

标签: scala akka

我对Akka的Ask模式有疑问。

我正在使用我的应用程序中的ask模式调用一个actor。我的应用程序是普通类(不是演员本身):

(actor1Ref ? msg) mapTo[ResponseMsg]

然而,上面调用的actor会调用第二个actor:

secondActor ! msg(sender)

并且它是第二个返回实际响应的actor,如:

originalSender ! responseMsg

所以基本上有一个间接涉及,当Actor1调用Actor2时,它使用!

我测试了代码并且它有效。但我不确定上述是否是编写此代码的正确方法。

那么我应该总是在actor1和actor2调用之间使用?并尝试pipeTo结果吗?或者我可以在中间调用之间使用!,当我想返回原始调用者时,只需向我传递的引用发送消息吗?

1 个答案:

答案 0 :(得分:2)

您目前的做法非常好。事实上,最好使用tell!)进行演员与演员之间的沟通。来自documentation

  

使用ask会产生性能影响,因为有些东西需要跟踪它何时超时,需要将Promise连接到ActorRef并且还需要通过远程访问可以访问。因此,总是首选tell表示性能,如果必须,则只需ask

     

[Tell]是发送邮件的首选方式。没有阻塞等待消息。这提供了最佳的并发性和可伸缩性特征。