【发布时间】:2020-01-17 10:22:22
【问题描述】:
我需要实现以下行为:
- 发出 REST 发布请求
- 如果响应返回状态为
429 Too many requests,则最多重试 3 次,延迟 1 秒 - 如果第三次重试失败或发生任何其他错误,请记录并将内容写入数据库
- 如果请求成功(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,但我只是不知道如何在我的情况下使用它。有什么有用的提示吗?
【问题讨论】:
标签: rx-java reactive-programming project-reactor spring-webclient