1
https://github.com/AsyncHttpClient/async-http-clientこのライブラリを私のscalaプロジェクトに使用していて、httpでいくつかの呼び出しを実行していますが、今はhttpコールを実行しています。 3回。AsyncHttpClientとscalaを使用して単純な再試行を実装する方法
このような実装方法を教えてください。
thaknks
https://github.com/AsyncHttpClient/async-http-clientこのライブラリを私のscalaプロジェクトに使用していて、httpでいくつかの呼び出しを実行していますが、今はhttpコールを実行しています。 3回。AsyncHttpClientとscalaを使用して単純な再試行を実装する方法
このような実装方法を教えてください。
thaknks
これは、あなたがそれを実行する場合は、今後は「回」倍
よりも成功ではなくなるまで、それは「実行プロセス」を印刷していることがわかりますFuture.recoverWith に基づいてリトライ機能の一例ですobject X extends App{
type Request = String
type Response = String
import scala.concurrent.ExecutionContext.Implicits.global
def retry(request: Request, process: Request => Future[Response], times: Int): Future[Response] ={
val responseF = process(request)
if(times > 0)
responseF.recoverWith{
case ex => println("fail")
retry(request, process, times - 1)
}
else
responseF
}
def process(s: Request): Future[Response] = {
println("run process")
if(Random.nextBoolean()) Future.successful("good") else Future.failed(new Exception)
}
val result = retry("", process, 3)
import scala.concurrent.duration._
println(Await.result(result, 1.second))
}