我是 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/