我正在谷歌搜索一个适合我的用例的例子,但到目前为止我还没有找到。
我正在编写一个Akka WebService,它应该处理一个可能很大的纯文本请求体,将每一行发送到Actor的传入消息队列。
你们中间有人可以在这里写一些代码,或者只是把我带到一个示例页面吗?
我实际上不知道从哪里开始:对我来说最大的问题是处理流一般(在我的情况下我想使用Akka流媒体库)
答案 0 :(得分:2)
要获取请求正文,您可以使用extractRequestEntity
指令创建路由。获得实体流后,您只需将每行文本分发到Actor
:
import akka.stream.scaladsl.Framing.delimiter
import akka.util.ByteString
import akka.actor.ActorRef
import akka.http.scaladsl.server.Directives.{extractRequestEntity, onComplete}
val maxLineLength = 256
val streamSplitter = delimiter(ByteString("\n"), maxLineLength)
val actorRef : ActorRef = ??? //not specified in question
val route : Route =
extractRequestEntity { entity =>
onComplete {
entity
.dataBytes
.via(streamSplitter)
.map(_.utf8String)
.runForeach(line => actorRef ! line)
} { _ =>
complete("all lines sent to actor")
}
}
问题没有说明响应是否依赖于Actor处理的结果,所以上面的例子只是将行发送给Actor,然后用包含简单消息的响应完成请求。
route
现在可以form the basis of a server。