从我收集到的内容中,"问"模式被认为是一种不好的做法,应该避免。相反,推荐的模式是每个请求的"演员"模型。然而,这对我来说没有意义,因为"问"模式就是这样 - 它为每个请求创建一个轻量级的actor。那么为什么这会被认为是坏的,特别是当期货更具可组合性并且能够更优雅地处理多个发送/接收的整理时呢?
答案 0 :(得分:10)
来自Akka docs:
“因为有需要,使用ask会有性能影响 为了跟踪它何时超时,需要有一些东西 将Promise连接到ActorRef,它也需要可以访问 通过远程处理。所以总是喜欢告诉性能,只询问 如果你必须的话。“
但有时您想从演员外部发送消息,在这种情况下您可以使用ask
。使用ask
将保证您在指定的超时内得到响应,有时这就是您想要的。但是,当您使用ask
模式时,您应该问自己一个问题,即您是否可以使用Future
代替。
ask
有一个地方,但由于上述原因,它应该使用非常有限。
您不必每个请求都使用actor。有些演员应该是长寿而有些则不是。如果actor执行潜在危险或阻塞操作,您可能希望为每个请求创建一个。无论适合您的应用逻辑。