我使用akka-http和akka-stream构建服务器但是它在2K +请求中丢失了一些请求。我错过了什么,或者我对akka的理解是错误的。
这是我的代码
implicit val actorRef = ActorSystem("system", testConf)
implicit val materializer = ActorMaterializer(ActorMaterializerSettings(actorRef).withInputBuffer(initialSize = 4, maxSize = 16))
implicit val requestTimeout = Timeout(8 seconds)
def response(req: HttpRequest): Future[Response] = {
val connectionFlow: Flow[HttpRequest, HttpResponse, Future[Http.OutgoingConnection]] =
Http().outgoingConnection(host = "url").async
for {
res <- Source.single(req.copy(uri = s"${req.uri.path}?${req.uri.rawQueryString.get}")).via(connectionFlow).runWith(Sink.head)
data <- res.entity.toStrict(5 second)
} yield (data.getData().decodeString("UTF-8"), res.status.intValue())
}
谢谢。
答案 0 :(得分:1)
很可能在你的理解的第一部分中存在超时或服务器端错误,因此你只能在res
中获得成功的回复。
我建议您使用物料工具中的withSupervisionStrategy
创建流程/图表来处理您的请求,这样您就可以看到究竟出了什么问题。实施细节取决于您的业务逻辑。