我是AKKA(java)的新手,我尝试使用AKKA实现以下功能:
我收到来自外部进程的一堆消息,每条消息都包含X个数字。 我想对每个数字执行一个操作,然后聚合(求和)每条消息的结果。
例如:
" doSomething"代码应该是并发的以及我的其余代码,所以我想实现类似如下的内容:
如何使用akka for java实现聚合?我需要存储一个上下文。 似乎我必须创建一个actor系统池,以确保每个子组(带有数字的消息)是单独处理的。
有什么想法吗? AKKA是否适合聚合操作(应该是并发的)?
答案 0 :(得分:1)
您描述的方案使用Ask pattern非常简单。
演员1向演员2发送消息,以告诉它的数字列表。收到消息后,Actor 2将发件人ActorRef
存储在属性中。这将在聚合结果后使用,以便将它们发送回Actor 1.
Actor 2实现了ask模式的逻辑,为列表中的每个数字询问 Actor 3。演员3计算doSomething()
的结果并将其返回给发件人(注意 - 发件人不会是演员2,而是创建一个匿名演员来处理未来的问题结果)。
完成所有未来要求后,我们会汇总结果并将Mapper
应用于这些结果。
最后,演员2将pipe
聚合和映射的结果添加到开头存储的Actor 1 ActorRef
。