子操作的AKKA聚合

时间:2016-02-22 19:45:16

标签: java akka

我是AKKA(java)的新手,我尝试使用AKKA实现以下功能:

我收到来自外部进程的一堆消息,每条消息都包含X个数字。 我想对每个数字执行一个操作,然后聚合(求和)每条消息的结果。

例如:

  • message1 - 1,3,5 - > doSomething的(1)+ doSomething的(3)+ doSomething的(5)
  • message2 - 5,6 - > doSomething的(5)+ doSomething的(6)

" doSomething"代码应该是并发的以及我的其余代码,所以我想实现类似如下的内容:

  • class Actor1 - >从队列中获取消息并将消息发送到Actor2
  • class Actor2 - >将消息拆分为它的号码并发送每个号码"消息给Actor3。
  • class Actor3 - >激活doSomething(数字)并将结果返回给Actor2。
  • class Actor2 - >将聚合它的相关消息结果(它将如何知道"数字"消息从哪里创建新的actor系统?)并将聚合结果返回给Actor1。 ...

如何使用akka for java实现聚合?我需要存储一个上下文。 似乎我必须创建一个actor系统池,以确保每个子组(带有数字的消息)是单独处理的。

有什么想法吗? AKKA是否适合聚合操作(应该是并发的)?

1 个答案:

答案 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