何时创建 Akka Actor

When to create an Akka Actor

我有一个 REST 服务,它只服务于一个 POST 请求。我想使用演员来处理请求。但是我不知道我是否应该创建一个演员并使用这个演员派生所有请求,或者我是否应该在每次收到请求时都创建一个演员。这些选择的优缺点是什么。 此外,当我创建一个参与者并使用该参与者处理我的所有请求时,它是如何并行执行的。它看起来确实像顺序执行。我也想了解这个。

如果您使用一个 Actor,请求会在 actor 邮箱中排队,并由 actor 一个接一个地处理。这是顺序的,不推荐。

这就是为什么说

One actor is no actor.

创建管理其他演员的经理演员。由于演员非常便宜,您可以毫无问题地为每个请求创建一个演员。 使用未来和未来的直接结果进行数据库交互和其他繁重的计算,以使用 pipeTo 模式请求处理参与者。

仅使用 actor 来划分和分配工作,使用 Futures 进行计算密集型工作。

我同意@pamu 说的。演员很便宜。但请注意,如果您要使用单例 Actor,请不要将其设为有状态,否则会造成麻烦。

如果您要使用 Futures 进行密集型工作(您应该这样做)。确保为他们提供特定的 ExecutionContext / Dispatcher。使用全局调度程序或 ExecutionContext 并不好。

或者在您拥有的每个 api 中,创建一个特定的调度程序来控制将在那种端点上工作的 Actors 的数量/api。

例如你有“/get/transactions”

指定一个只会产生这个线程数的调度程序。为此 api.

这样做的好处是您可以控制您的应用程序使用的线程和资源的数量。在处理繁忙的交通时。这是一个很好的做法。

我会根据请求创建一个 actor,并使用 "tell" 模式将工作委托给新创建的 actor。如果您使用的 REST 框架支持完成来自另一个参与者的请求(Spray,Akka-HTTP 支持),那么您可以完成来自这个新参与者的请求。这样您的请求处理 actor 就可以自由处理下一个请求。

我发现 this 一个很好的资源,它解释了询问和告诉和按请求参与者的优缺点。对你有帮助。