Akka Streams的动态扇出

Akka Streams的动态扇出,akka,akka-stream,Akka,Akka Stream,我正在构建一个Akka Streams应用程序,它需要经过几个步骤。有一个特定步骤会产生0个或多个结果,但事先不知道有多少个结果。每个结果都必须异步处理(由相同类型的组件处理),最后必须合并所有结果 我应该如何在Akka Streams中对此进行建模?我注意到GraphDsl有一个广播元素,可以让您对扇出进行建模,但是这似乎只有在事先知道出口数量的情况下才可能实现。 在Akka Streams中,有没有一种方式可以像广播一样,但却可以向动态的多个网点进行扇形传播?请查看本页中的集线器: 在许多情

我正在构建一个Akka Streams应用程序,它需要经过几个步骤。有一个特定步骤会产生0个或多个结果,但事先不知道有多少个结果。每个结果都必须异步处理(由相同类型的组件处理),最后必须合并所有结果

我应该如何在Akka Streams中对此进行建模?我注意到GraphDsl有一个广播元素,可以让您对扇出进行建模,但是这似乎只有在事先知道出口数量的情况下才可能实现。 在Akka Streams中,有没有一种方式可以像广播一样,但却可以向动态的多个网点进行扇形传播?

请查看本页中的集线器:

在许多情况下,特定服务(表示为接收器、源或可能的流)的消费者或生产者是动态的,并且事先不知道。图形DSL不允许表示这一点,图形的所有连接必须事先知道,并且必须预先连接。要允许动态扇入和扇出流,应使用集线器


事实证明,
mapcontat
满足了我的需求。这是一个POC:

包流
导入scala.concurrent_
进口阿克卡_
输入akka.actor_
导入akka.stream_
导入akka.stream.scaladsl_
导入scala.util.Random
对象StreamsTest扩展应用程序{
隐式val系统=ActorSystem(“TestSystem”)
隐式val-materializer=actormatarializer()
导入system.dispatcher
案例类拆分请求(s:字符串)
def requestHandlerWithMultipleResults(请求:SplitRequest):列表[字符串]=
请求s.split(“”).toList
def slowProcessingTask(s:字符串)={
线程睡眠(随机的nextInt(5000))
s、 图珀案
}
val g=RunnableGraph.fromGraph(GraphDSL.create(){隐式生成器:GraphDSL.builder[未使用]=>
导入GraphDSL.Implicits_
val source:source[String,NotUsed]=源(列表(SplitRequest(“一月-二月-三月-四月-五月”))
.mapConcat(具有多个结果的RequestHandlers)
.mapAsyncUnordered(5)(s=>Future(慢处理任务)))
val sink=sink.foreach(println)
源~>汇
封闭形状
})
g、 运行()
}
输出,例如:

MAY
一月
二月
前进
四月

感谢您的回答,但我仍然不知道广播或合并中心如何解决我的问题。在链接中给出的代码示例中,生产者仍然显式地多次调用使用者。