我有一个REST服务,它只为一个POST请求提供服务。我想使用actor来处理请求。但是我不知道我是否应该创建一个actor并使用这个actor派生所有请求,或者我应该在每次收到请求时创建一个actor。这些选择的优缺点是什么? 另外,当我创建一个actor并使用该actor处理我的所有请求时,它是如何并行执行的。它看起来像顺序执行。我也想了解这一点。
答案 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是一个很好的资源,可以解释专业人士和问与缺点告诉和每请求演员。它对你有帮助。