次の動作を実装する必要があります。
- REST 投稿リクエストを作成する
- 応答が status で返された場合
429 Too many requests
、1 秒の遅延で最大 3 回再試行します - 3 回目の再試行が失敗した場合、またはその他のエラーが発生した場合は、ログに記録してデータベースに何かを書き込みます。
- リクエストが成功した場合 (http ステータス 200)、いくつかの情報をログに記録します
この目的のために Spring WebClient を使用したいと思い、次のコードを思いつきました。
Mono<ClientResponse> response = webClient.post()
.uri(URI.create("/myuri"))
.body(BodyInserters.fromObject(request))
.retrieve()
.onStatus(httpStatus -> httpStatus.equals(HttpStatus.TOO_MANY_REQUESTS),
response -> Mono.error(new TooManyRequestsException("System is overloaded")))
.bodyToMono(ClientResponse.class)
.retryWhen(Retry.anyOf(TooManyRequestsException.class)
.fixedBackoff(Duration.ofSeconds(1)).retryMax(3))
.doOnError(throwable -> saveToDB(some_id, throwable))
.subscribe(response -> logResponse(some_id, response));
ここで、再試行メカニズムとエラー処理が期待どおりに機能するかどうかをテストしたいと思います。この目的でStepVerifierを使用できるかもしれませんが、私の場合はそれを使用する方法がわかりません。役に立つヒントはありますか?