我们还需要Json-Streaming支持:
implicit val jsonStreamingSupport = EntityStreamingSupport.json()
.withParallelMarshalling(parallelism = 8, unordered = false)
FileIO是blocking操作,我们还可以选用独立的线程供blocking操作使用:
FileIO.fromPath(file, 256)
.withAttributes(ActorAttributes.dispatcher("akka.http.blocking-ops-dispatcher"))
现在我们可以从在server上用一个文件构建Source然后再转成Response:
val route =
get {
path("files"/Remaining) { name =>
complete(loadFile(name))
}
}
def loadFile(path: String) = {
// implicit val ec = httpSys.dispatchers.lookup("akka.http.blocking-ops-dispatcher")
val file = Paths.get("/Users/tiger/"+path)
FileIO.fromPath(file, 256)
.withAttributes(ActorAttributes.dispatcher("akka.http.blocking-ops-dispatcher"))
.map(_.utf8String)
}
同样,我们也可以把数据库表内数据转成Akka-Stream-Source,然后再实现到MessageEntity的转换。转换过程包括用Query读取数据库表内数据后转成Reactive-Publisher,然后把publisher转成Akka-Stream-Sour
【本文由“程序员要加班”发布,2017年11月6日】