Scala 如何在Akka Streams流中重用相同的flowShape

Scala 如何在Akka Streams流中重用相同的flowShape,scala,akka,akka-stream,Scala,Akka,Akka Stream,我有一个连接几个流形状的流,它看起来像这样: def mainFlow: Flow[MyGraphElement, MyGraphElement, NotUsed] = Flow.fromGraph(GraphDSL.create() { implicit builder => val someClassifier = builder.add(checkSomething) // FlowShape[MyGraphElement,MyGraphElement] val f

我有一个连接几个流形状的流,它看起来像这样:

def mainFlow: Flow[MyGraphElement, MyGraphElement, NotUsed] = Flow.fromGraph(GraphDSL.create() { implicit builder =>

    val someClassifier = builder.add(checkSomething) // FlowShape[MyGraphElement,MyGraphElement]
    val filteringRouter = builder.add(partitionBySomething) // UniformFanOutShape[MyGraphElement,MyGraphElement]
    val mlRouter = builder.add(partitionBySomethinfElse()) // UniformFanOutShape[MyGraphElement,MyGraphElement]
    val publishToSnsFlow = builder.add(publishEvidenceToSns()) // FlowShape[MyGraphElement,MyGraphElement]

    val updateTaskStatusDoneFlow1 = builder.add(updateTaskStatus()) // FlowShape[MyGraphElement,MyGraphElement]
    val updateTaskStatusDoneFlow2 = builder.add(updateTaskStatus())
    val updateTaskStatusDoneFlow3 = builder.add(updateTaskStatus())

    someClassifier ~> filteringRouter
    filteringRouter.out("case1") ~> publishToSnsFlow ~> updateTaskStatusDoneFlow1 ~> merge
    filteringRouter.out("case2") ~> someDeciderFlow ~> mlRouter

    mlRouter.out("case5") ~> doSomethingFlow ~> updateTaskStatusDoneFlow2 ~> merge
    mlRouter.out("case4") ~> doSomethingElseFlow ~> updateTaskStatusDoneFlow3 ~> merge

    FlowShape(someClassifier.in, merge.out)
})
我的问题是,我需要用不同的名称调用同一个方法3次,因为FlowShap在一个流中只能使用一次……或者我遗漏了一些东西,我可以用不同的方式使它看起来更优雅吗?我指的是updateTaskStatusDoneFlow1/2/3


谢谢

先合并,然后在流程中运行怎么样

val-someClassifier=builder.add(checkSomething)//FlowShape[MyGraphiElement,MyGraphiElement]
val filteringroutter=builder.add(partitionBySomething)//UniformFanOutShape[MyGraphiElement,MyGraphiElement]
val mlRouter=builder.add(partitionBySomethinfElse())//UniformFanOutShape[MyGraphiElement,MyGraphiElement]
val publishTossFlow=builder.add(publishVidenceToss())//FlowShape[MyGraphiElement,MyGraphiElement]
val updateTaskStatusDoneFlow=builder.add(updateTaskStatus())//FlowShape[MyGraphiElement,MyGraphiElement]
someClassifier~>过滤器灌浆器
filterGrowter.out(“案例1”)~>publishToSnsFlow~>merge
FilterInGrowter.out(“案例2”)~>someDeciderFlow~>mlRouter
mlRouter.out(“case5”)~>doSomethingFlow~>merge
mlRouter.out(“case4”)~>doSomethingElseFlow~>merge
merge.out~>updateTaskStatusDoneFlow
FlowShape(someClassifier.in、updateTaskStatusDoneFlow.out)