java - 子操作的 AKKA 聚合

标签 java akka

我是 AKKA (java) 新手,我正在尝试使用 AKKA 实现以下内容:

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

例如:

  • 消息1 - 1,3,5 --> doSomething(1)+doSomething(3)+doSomething(5)
  • message2 - 5,6 --> doSomething(5)+doSomething(6)

“doSomething”代码应该与我的其余代码一样并发,因此我想实现如下所示的内容:

  • Actor1 类 --> 从队列中获取消息并将消息发送到 Actor2
  • class Actor2 --> 将消息拆分为其数字,并将每个“数字”消息发送到 Actor3。
  • Actor3 类 --> 激活 doSomething(number) 并将结果返回给 Actor2。
  • 类 Actor2 --> 将聚合它的相关消息结果(它如何知道“数字”消息来自哪里?为此创建一个新的 Actor 系统?)并将聚合结果返回给 Actor1。 ...

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

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

最佳答案

您描述的场景使用 Ask pattern 来实现相当简单。 .

Actor 1 向 Actor 2 发送一条消息,告诉它数字列表。收到消息后,Actor 2 将发送者 ActorRef 存储在属性中。稍后在聚合结果后将使用它,以便将它们发送回 Actor 1。

Actor 2 实现询问模式的逻辑,向 Actor 3 询问列表中的每个数字。 Actor 3 计算 doSomething() 的结果并将其返回给发送者(注意 - 发送者不会是 Actor 2,而是一个为处理请求的 future 结果而创建的匿名 Actor)。

一旦所有 future 的请求完成,结果就会被聚合,Mapper 会应用于它们。

最后,Actor 2 将通过管道将聚合和映射的结果传送到开始时存储的 Actor 1 ActorRef

关于java - 子操作的 AKKA 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35562456/

相关文章:

java - 检索方法应该返回 'null' 还是在无法生成返回值时抛出异常?

Java:如何将 ArrayList 拆分为多个小的 ArrayList?

java - 具有长时间运行任务的队列的 Actor 设计

java - 为什么这些字符串的 str == str.intern() 的结果不同?

java - 使用 odata4j 的 OData 发布缺少 "category"元素

java - 有没有办法可以重用 pom.xml 中定义的属性,作为另一个 *.xml 文件中的整数类型?

akka - 崩溃后如何重新创建动态创建的持久化 AKKA actor

java - Play 2.5 akka.actor.ActorSystem isTermination 方法已弃用

scala - Akka 和并发 Actor 执行

scala - 在 Scala 中存储特定类类型的序列?