2

GraphDSL.create() を使用して RunnableGraph を構成しました。また、ClosedShape を指定し、すべてのアウトレット/インレットを接続しました。プログラムを実行しようとすると、次の実行時例外が発生します。

requirement failed: The inlets [] and outlets [] must correspond to the inlets [filter.in] and outlets [out]

インレットとアウトレットを正しく接続していない場所はありますか?

グラフコードは次のとおりです。

val g = RunnableGraph.fromGraph(GraphDSL.create() {
  implicit builder =>
    import GraphDSL.Implicits._

    // Source
    val A: Outlet[String] = builder.add(Source.fromIterator(() => flightDelayLines)).out

    // Flows
    val B: FlowShape[String, FlightEvent] = builder.add(csvToFlightEvent)
    val C: FlowShape[FlightEvent, DelayRecord] = builder.add(flightEventToDelayRecord)
    val D: UniformFanOutShape[DelayRecord, DelayRecord] = builder.add(Broadcast[DelayRecord](2))
    val F: FlowShape[DelayRecord, (Int, Int)] = builder.add(countByCarrier)

    // Sinks
    val E: Inlet[Any] = builder.add(Sink.ignore).in
    val G: Inlet[Any] = builder.add(Sink.ignore).in


    // Graph
    A ~> B ~> flightEventToDelayRecord ~> D ~> E
                                          D ~> F ~> G

    ClosedShape
}).run()
4

1 に答える 1

1

私は自分の問題を解決しました。非常に単純な見落としでした。Cビルダーに追加したものを使用するのではなくflightEventToDelayRecord、グラフ内の関数を使用していました。解決策はC、代わりにグラフで使用することでした。

// Graph
A ~> B ~> C ~> D ~> E
               D ~> F ~> G

これにより、大きなグラフを小さなグラフに分割することがいかに重要であるかを実感しました。実行時例外は根本原因を特定しないため (「C は使用されていません」など)、小さなグラフで作業する場合は、これらの実行時例外のデバッグが容易になる可能性があります。これが立ち往生している他の人の助けになることを願っています。

于 2016-02-29T01:51:01.880 に答える