用于发布数据的Akka流期望图形不是流入的流

时间:2017-05-18 10:50:33

标签: scala akka-http akka-stream

我正在尝试创建一个示例akka流,该流采用CSV文件,将其更改为XML(使用具有toXml函数的现有对象),然后将其发布到端点。我创建的代码如下所示: -

val poolClientFlow =
  Http().cachedHostConnectionPool[Thing]("localhost",5000)

val file = new File("./example.csv")

val uploadPipeline =
  FileIO.fromFile(file)
    .via(Framing.delimiter(ByteString("\n"), maximumFrameLength = 1024))
    .map(_.utf8String)
    .map(_.split(","))
    .map(t => Thing(t(0),t(1).toInt,t(2).toInt) )
    .map(_.toXml)
    .map(_.toString)
    .map(ByteString(_))
    .map(d =>HttpRequest(method=HttpMethods.POST,uri=s"/import",entity = d))
    .via(poolClientFlow)
    .runForeach(x => System.out.println(x.toString()))

然而,由于.via(poolClientFlow)找不到akka.stream.scaladsl.Flow[(akka.http.scaladsl.model.HttpRequest, com.cogpp.exp.Thing),(scala.util.Try[akka.http.scaladsl.model.HttpResponse],,因此它无法编译为akka.stream.Graph[akka.stream.FlowShape[akka.http.scaladsl.model.HttpRequest,?],?],但此版本的via需要poolClientFlow

我想我没有正确地构建我的list.files,但是我没有看到我所做的和我在其他示例代码中看到的区别。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

来自cachedHostConnectionPool[T]的流量采用(HttpRequest,T)元组这样,当您最终得到(Try[HttpResponse], T)结果时,可以保留请求的某些上下文。如果您不需要,只需传入单位()

我不确定是否有一个API只接受请求。

要编写示例,您可以..

.map(d => (HttpRequest(method=HttpMethods.POST,uri=s"/import",entity = d), d))
.via(Http().cachedHostConnectionPool[ByteString]("localhost",5000))

另外,如果我在那里你在那段代码中不会有那么多.map。你的序列化不会阻塞,并不需要所有这些步骤之间的背压。我有一个纯函数def write(t: Thing): HttpRequest。但那没什么大不了的......