スプレーのパイプラインを使用して、次のような HTTP リクエストを作成する場合:
val urlpipeline = sendReceive ~> unmarshal[String]
urlpipeline { Get(url) }
リクエストのタイムアウトと、その特定のリクエストに対して再試行する回数を指定する方法はありますか?
私が見つけたすべてのドキュメントは、構成で行っていることのみを参照しています(それでも、動作させることができないようです)。
どうも
スプレーのパイプラインを使用して、次のような HTTP リクエストを作成する場合:
val urlpipeline = sendReceive ~> unmarshal[String]
urlpipeline { Get(url) }
リクエストのタイムアウトと、その特定のリクエストに対して再試行する回数を指定する方法はありますか?
私が見つけたすべてのドキュメントは、構成で行っていることのみを参照しています(それでも、動作させることができないようです)。
どうも
Akka システムで Spray 1.2.0 を使用しています。アクター内で、既存の Akka システムをインポートして、デフォルトの Akka 構成ファイルを使用できるようにします。
implicit val system = context.system
import context.dispatcher
val pipeline: HttpRequest => Future[HttpResponse] = sendReceive
で構成を変更できるようになりましたapplication.conf
。
spray.can.host-connector {
max-connections = 10
max-retries = 3
max-redirects = 0
pipelining = off
idle-timeout = 30 s
client = ${spray.can.client}
}
HostConnectorSetup を使用してコードで設定を変更することは可能ですが、すべてのパラメーターを定義する必要があります。(スプレー使用例による)
val pipeline: Future[SendReceive] =
for (
Http.HostConnectorInfo(connector, _) <-
IO(Http) ? Http.HostConnectorSetup("www.spray.io", port = 80, settings = Some(new HostConnectorSettings(maxConnections = 3, maxRetries = 3, maxRedirects = 0, pipelining = false, idleTimeout = 5 seconds, connectionSettings = ClientConnectionSettings(...))))
) yield sendReceive(connector)
コードでデフォルトのタイムアウトをオーバーライドする最も簡単な方法はfutureTimeout
、メソッドに暗黙の引数を使用することだと思いますsendReceive
。そのパラメータのデータ型はakka.util.Timeout
. したがって、デフォルトの 60 秒ではなく 120 秒のタイムアウトが必要な場合は、これを行うことができます...
implicit val timeout = Timeout(120 seconds)
val urlpipeline = sendReceive ~> unmarshal[String]
urlpipeline { Get(url) }
ただし、クライアント コードで同様の方法で最大再試行回数を変更できるパラメーターは見当たりません。