什么时候创建一个Akka演员

时间:2016-10-23 13:01:04

标签: scala parallel-processing akka akka-actor

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

3 个答案:

答案 0 :(得分:1)

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

这就是为什么说的

  

一个演员不是演员。

创建一个管理其他actor的经理Actor。由于演员很便宜,你可以为每个请求创建一个演员而没有任何问题。 使用未来的直接结果进行数据库交互和其他繁重的计算,以使用pipeTo模式请求处理参与者。

仅使用演员分割和分配作品,并使用Futures进行计算密集型工作。

答案 1 :(得分:1)

我同意@pamu说的话。演员很便宜。但要注意,如果你要使用单身演员,不要让它成为有状态会导致麻烦。

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

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

例如,你有“/ get / transactions”

指定一个只生成此线程的调度程序。对于这个api。

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

答案 2 :(得分:1)

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

我发现this是一个很好的资源,可以解释专业人士和问与缺点告诉和每请求演员。它对你有帮助。