Akka Stream - 简单的源/汇示例入口和出口不对应

时间:2016-05-12 21:56:27

标签: scala akka-stream

我开始学习Akka Stream。我有一个问题,我简化到这个:

import akka.actor.ActorSystem
import akka.stream.{ActorMaterializer, ClosedShape}
import akka.stream.scaladsl.{GraphDSL, RunnableGraph, Sink, Source}

object Test extends App {
  val graph = GraphDSL.create() { implicit b =>
    val in  = Source.fromIterator(() => (1 to 10).iterator.map(_.toDouble))
    b.add(in)
    val out = Sink.foreach[Double] { d =>
      println(s"elem: $d")
    }
    b.add(out)
    in.to(out)
    ClosedShape
  }

  implicit val system = ActorSystem()
  implicit val mat    = ActorMaterializer()
  val rg = RunnableGraph.fromGraph(graph)
  rg.run()
}

这会引发运行时异常:

  

线程中的异常" main" java.lang.IllegalArgumentException:要求失败:inlets []和outlets []必须对应于inlet [map.in]和outlet [StatefulMapConcat.out]

问题是,在我的实际情况中,我无法使用~>中的GraphDSL.Implicits运算符,因为没有SourceFlow的常见超类型(我的图是从另一个DSL而不是在一个地方创建的。所以我只能使用b.addin.to(out)

1 个答案:

答案 0 :(得分:2)

似乎必须使用特殊的"副本"来自db1 = QSqlDatabase::addDatabase("QODBC"); db1.setHostName("localhost"); db1.setPort(3306); db1.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=j\\BDProjet.mdb"); 的出口:

builder.add