2016-02-17 12 views
14

Tôi đang sử dụng dòng akka graphDSL để tạo biểu đồ runnable. Không có lỗi biên dịch-thời gian wrt đầu vào/đầu ra của các thành phần dòng. Thời gian chạy ném theo lỗi sau:Lỗi khi tạo biểu đồ: yêu cầu không thành công: Cửa hút gió [] và đầu ra [] phải tương ứng với cửa hút gió [in] và đầu ra [out]

Bất kỳ ý tưởng nào tôi nên xác minh để làm cho nó chạy?

requirement failed: The inlets [] and outlets [] must correspond to the inlets [in] and outlets [out] 
at scala.Predef$.require(Predef.scala:219) 
at akka.stream.Shape.requireSamePortsAs(Shape.scala:168) 
at akka.stream.impl.StreamLayout$CompositeModule.replaceShape(StreamLayout.scala:390) 
at akka.stream.scaladsl.GraphApply$class.create(GraphApply.scala:18) 
at akka.stream.scaladsl.GraphDSL$.create(Graph.scala:813) 
at com.flipkart.connekt.busybees.streams.Topology$.bootstrap(Topology.scala:109) 
at com.flipkart.connekt.busybees.BusyBeesBoot$.start(BusyBeesBoot.scala:65) 
at com.flipkart.connekt.boot.Boot$.delayedEndpoint$com$flipkart$connekt$boot$Boot$1(Boot.scala:39) 
at com.flipkart.connekt.boot.Boot$delayedInit$body.apply(Boot.scala:13) 

Cấu trúc đồ thị:

source ~> flowRate ~> render ~> platformPartition.in 
platformPartition.out(0) ~> formatIOS ~> apnsDispatcher ~> apnsEventCreator ~> merger.in(0) 
platformPartition.out(1) ~> formatAndroid ~> httpDispatcher ~> gcmPoolFlow ~> rHandlerGCM ~> merger.in(1) 
merger.out ~> evtCreator ~> Sink.ignore 
+0

Bạn có thể thực sự đăng kế hoạch chi tiết đồ thị của mình không? – manub

+1

Tôi đã cập nhật câu hỏi với cấu trúc biểu đồ. Các tham số kiểu nguồn/lưu lượng/sink đều khớp trên đầu vào/đầu ra. – phantomastray

+0

Các kiểu 'render',' platformPartition', 'merger' và' evtCreator' cũng có thể hữu ích. – manub

Trả lời

14

Bạn có một đầu vào không sử dụng hoặc ổ cắm (một trong những dòng hoặc một cái gì đó bạn không kết nối trên tất cả các bên). Dưới đây là một số ví dụ:

này hoạt động:

val workingFlow = 
    Flow.fromGraph(GraphDSL.create() { implicit b => 
    import GraphDSL.Implicits._ 
    val intFlow = b.add(Flow[Int]) 
    FlowShape(intFlow.in, intFlow.out) 
    }) 

Các mã sau đây tạo ra một lỗi tương tự như của bạn, bởi vì nó có cả một dòng chảy không sử dụng:

val buggyFlow = 
    Flow.fromGraph(GraphDSL.create() { implicit b => 
    import GraphDSL.Implicits._ 
    val intFlow = b.add(Flow[Int]) 
    val unusedFlow = b.add(Flow[Int]) // ERROR: This flow is unused 
    FlowShape(intFlow.in, intFlow.out) 
    }) 

Một ví dụ hơi phức tạp hơn: Ở đây không có toàn bộ dòng chảy không sử dụng, chỉ có một lối thoát không sử dụng. Nó tạo ra cùng một lỗi:

val buggyFlow = 
    Flow.fromGraph(GraphDSL.create() { implicit b => 
    import GraphDSL.Implicits._ 

    val broadcast = b.add(Broadcast[Int](2)) 
    val intFlow = b.add(Flow[Int]) 
    val unusedFlow = b.add(Flow[Int]) // ERROR: This flow's outlet isn't used 

    broadcast ~> intFlow 
    broadcast ~> unusedFlow 

    FlowShape(broadcast.in, intFlow.out) 
    }) 
+0

vâng, chúng tôi đã tìm ra điều đó từ lâu. Thông báo lỗi không trực quan. Tôi nên cập nhật câu hỏi. :) Cảm ơn, mặc dù đã xem xét nó. – phantomastray

Các vấn đề liên quan