我在https://doc.akka.io/docs/akka-http/current/introduction.html查看了Akka HTTP路由的示例,奇怪的是,建立在Akka Streams之上的内容没有一个示例连接到流。
有人可以展示一个创建Java DSL流程的简单示例(请不要使用Scala),然后将Route直接连接到该流程吗?
或者我错过了这一点并且它不可能但需要Route中的一些CompletionStage代码来等待调用Flow的胶水代码的结果?
编辑:澄清流程可以做一些事情,比如将字符串附加到已发布的请求正文。
答案 0 :(得分:3)
使用akka流完成路线绝对是可能的。它涉及:
答案 1 :(得分:1)
编辑:澄清流程可以做一些事情,比如将字符串附加到已发布的请求正文。
Michał的答案包含很好的链接,所以请给他们一个阅读。默认情况下,Akka HTTP始终使用其数据进行流式传输 - 例如实体。因此,例如,要进行流式“回声”,同时添加后缀,您可以执行以下操作:
path("test", () ->
// extract the request entity, it contains the streamed entity as `getDataBytes`
extractRequestEntity(requestEntity -> {
// prepare what to add as suffix to the incoming entity stream:
Source<ByteString, NotUsed> suffixSource =
Source.single(ByteString.fromString("\n\nADDS THIS AFTER INCOMING ENTITY"))
// concat the suffix stream to the incoming entity stream
Source<ByteString, Object> replySource = requestEntity.getDataBytes()
.concat(suffixSource);
// prepare and return the entity:
HttpEntity.Chunked replyEntity = HttpEntities.create(ContentTypes.TEXT_PLAIN_UTF8, replySource);
return complete(StatusCodes.OK, replyEntity);
})
);
话虽如此,有许多方法可以利用流媒体功能,包括框架JSON Streaming等。您还应该docs page about implications of streaming阅读。