我正在尝试创建一个示例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
,但是我没有看到我所做的和我在其他示例代码中看到的区别。有人可以帮忙吗?
答案 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
。但那没什么大不了的......