你可以在忙碌的时候从Akka游泳池暂停演员吗?

时间:2018-02-15 08:32:04

标签: playframework akka

我正在使用Play和Akka制作原型微服务系统。我的计划是使用Play提供公共API,然后将所有工作分发给Akka。

在大多数情况下,我希望在Play API上获得一个请求,该请求将被分派到远程角色池(在群集中)。我正在考虑在Play中使用actor来进行集群调度,这在大多数情况下就像转发请求一样简单,但在某些情况下会请求来自多个远程actor的响应以进行聚合。在这种情况下,我希望在回复Play API请求之前收到所有远程响应。

我能想到的最简单的方法是为每个请求创建一个actor实例,一旦聚合了响应并返回,它就会终止。我担心这种方法似乎效率低下,并认为演员池可能更有效率。我已经阅读了有关池策略的内容,有些似乎是合适的,但是我基本上需要删除一个actor在接收新请求消息时处理前一个请求消息(并等待响应)。我想我可以存储传入的请求,但我不想在处理现有请求时阻止它们。我还可以设想使用地图,以便能够同时处理多个请求,并根据某种唯一ID聚合响应,尽管这似乎不必要地使设计复杂化。

有人可以建议一个简单的解决方案吗?

1 个答案:

答案 0 :(得分:0)

只需ask远程参与者for理解,然后在yield块中响应请求。您需要为要执行的ExecutionContext提供Future,这可能与演员自己的ask不同。这样,当前一个请求在另一个池中处理时,actor可以继续下一个请求。

顺便说一句,while (true) { scanf("%s", input); if (strlen(plaintext) + strlen(input) + 1 > MAX_PGRAPH_LENGTH) break; strcat(plaintext, input); strcat(plaintext, " "); } 模式本身实例化一个一次性的actor来处理调度,所以这就像一个actor池。