我正在使用Play和Akka制作原型微服务系统。我的计划是使用Play提供公共API,然后将所有工作分发给Akka。
在大多数情况下,我希望在Play API上获得一个请求,该请求将被分派到远程角色池(在群集中)。我正在考虑在Play中使用actor来进行集群调度,这在大多数情况下就像转发请求一样简单,但在某些情况下会请求来自多个远程actor的响应以进行聚合。在这种情况下,我希望在回复Play API请求之前收到所有远程响应。
我能想到的最简单的方法是为每个请求创建一个actor实例,一旦聚合了响应并返回,它就会终止。我担心这种方法似乎效率低下,并认为演员池可能更有效率。我已经阅读了有关池策略的内容,有些似乎是合适的,但是我基本上需要删除一个actor在接收新请求消息时处理前一个请求消息(并等待响应)。我想我可以存储传入的请求,但我不想在处理现有请求时阻止它们。我还可以设想使用地图,以便能够同时处理多个请求,并根据某种唯一ID聚合响应,尽管这似乎不必要地使设计复杂化。
有人可以建议一个简单的解决方案吗?
答案 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池。