我使用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()
答案 0 :(得分:1)
我解决了自己的问题。这是一个非常简单的疏忽。我使用图中的C
函数,而不是使用我添加到构建器中的flightEventToDelayRecord
。解决方案是在图表中使用C
。
// Graph
A ~> B ~> C ~> D ~> E
D ~> F ~> G
这让我意识到将大图打成小图是多么重要。运行时异常没有查明根本原因(例如,“C未使用”),因此如果使用较小的图形,调试这些运行时异常可能会更容易。希望这有助于其他任何陷入困境的人。