我对Akka的Ask模式有疑问。
我正在使用我的应用程序中的ask模式调用一个actor。我的应用程序是普通类(不是演员本身):
(actor1Ref ? msg) mapTo[ResponseMsg]
然而,上面调用的actor会调用第二个actor:
secondActor ! msg(sender)
并且它是第二个返回实际响应的actor,如:
originalSender ! responseMsg
所以基本上有一个间接涉及,当Actor1调用Actor2时,它使用!
。
我测试了代码并且它有效。但我不确定上述是否是编写此代码的正确方法。
那么我应该总是在actor1和actor2调用之间使用?
并尝试pipeTo
结果吗?或者我可以在中间调用之间使用!
,当我想返回原始调用者时,只需向我传递的引用发送消息吗?
答案 0 :(得分:2)
您目前的做法非常好。事实上,最好使用tell
(!
)进行演员与演员之间的沟通。来自documentation:
使用
ask
会产生性能影响,因为有些东西需要跟踪它何时超时,需要将Promise
连接到ActorRef
并且还需要通过远程访问可以访问。因此,总是首选tell
表示性能,如果必须,则只需ask
。[Tell]是发送邮件的首选方式。没有阻塞等待消息。这提供了最佳的并发性和可伸缩性特征。