akka 2.3.6でspray 1.3.2を使用。(akka はスプレーのみに使用されます)。
巨大なファイルを読み取り、各行に対して http リクエストを作成する必要があります。
イテレータを使用してファイルを1行ずつ読み取り、アイテムごとにリクエストを行います。一部の行では正常に実行されますが、ある時点で失敗し始めます:
akka.pattern.AskTimeoutException: Ask timed out on [Actor[akka://default/user/IO-HTTP#-35162984]] after [60000 ms]
.
最初はサービスをオーバーロードしていると思ったので、「spray.can.host-connector.max-connections」を 1 に設定しました。実行速度はかなり遅くなりましたが、同じエラーが発生しました。
ここにコード:
import spray.http.MediaTypes._
val EdnType = register(
MediaType.custom(
mainType = "application",
subType = "edn",
compressible = true,
binary = false,
fileExtensions = Seq("edn")))
val pipeline = (
addHeader("Accept", "application/json")
~> sendReceive
~> unmarshal[PipelineResponse])
def postData(data: String) = {
val request = Post(pipelineUrl).withEntity(HttpEntity.apply(EdnType, data))
val responseFuture: Future[PipelineResponse] = pipeline(request)
responseFuture
}
dataLines.map { d =>
val f = postData(d)
f.onFailure { case e => println("Error - "+e)} // This is where the errors are display
f.map { p => someMoreLogic(d, p) }
}
aggrigateResults(dataLines)
データ全体は必要なく、いくつかの集計だけが必要なので、このようにします。
これを解決して完全に非同期に保つにはどうすればよいですか?