繁体   English   中英

何时创建Akka演员

[英]When to create an Akka Actor

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

如果使用一个Actor,则Actor请求将排队在actor邮箱中,并由actor逐一处理。 这是顺序的,不建议这样做。

那就是为什么这么说

一个演员不是演员。

创建一个管理其他演员的经理演员。 由于角色非常便宜,因此您可以为每个请求创建一个角色,而不会出现任何问题。 使用将来进行数据库交互和其他繁重的计算,并使用将来的直接结果来使用pipeTo模式请求处理pipeTo

仅使用参与者来划分和分配工作,并使用期货来进行计算密集型工作。

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

而且,如果您要使用期货做大量的工作(应该做)。 确保为他们提供特定的ExecutionContext / Dispatcher。 使用全局调度程序或ExecutionContext不好。

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

例如,您有“ / get / transactions”

指定只会产生此#线程的调度程序。 对于此api。

这样做的好处是您可以控制应用程序使用的线程和资源的数量。 当涉及到交通繁忙时。 这是一个好习惯。

我将为每个请求创建一个演员,并使用“告诉”模式将工作委派给新创建的演员。 如果您使用的REST框架支持完成来自其他角色的请求(Spray,Akka-HTTP则支持),那么您可以完成来自此新角色的请求。 这样,您的请求处理角色便可以自由处理下一个请求。

我发现是一个很好的资源,解释了Ask&Tell和每个请求者的利弊。 对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM