提问人:sandeep 提问时间:11/10/2023 更新时间:11/10/2023 访问量:30
Spring Boot Web 客户端,用于处理重试以及成功和错误响应
Spring boot Web Client to handle retries along with success and error response
问:
我正在尝试创建Spring boot Web客户端来处理成功和错误响应以及重试。我能够在不停用的情况下处理成功/错误响应。下面是我创建的用于动态处理响应的代码。
protected <R,T> Mono<T> Post(final String endpoint,
final MultiValuesMap<String,String) headers,
final R requestBody,
final Class<? extends T> responseType,
final Class<? extends T> errorResponseType) {
return webclient.post().uri(endpoint).
headers(httpHeaders.addAll(headers).bodyValue(requestBody).
exhangeToMono(clientResponse -> {
if(clientResponse.statusCode.isError()){
return clientResponse.bodyToMono(errorResponseType);
}
return clientResponse.bodyToMono(responseType);
});}
如果像下面这样使用将能够处理成功和错误响应,则上述泛型代码将按预期进行预期
BaseResponse response = post("url",headers,requestBoy,SuccessResponse.class,ErrorResponse.class).
//SuccessResponse,ErrorResponse extends some BaseResponse class
现在我正在尝试在上面添加额外的重试逻辑,如下所示,
protected <R,T> Mono<T> Post(final String endpoint,
final MultiValuesMap<String,String) headers,
final R requestBody,
final Class<? extends T> responseType,
final Class<? extends T> errorResponseType) {
return webclient.post().uri(endpoint).
headers(httpHeaders.addAll(headers).bodyValue(requestBody).
exhangeToMono(clientResponse -> {
if(clientResponse.statusCode.isError()){
return clientResponse.bodyToMono(errorResponseType);
}
return clientResponse.bodyToMono(responseType);
}).retryWhen(Retry.fixedDelay(3,Duration.ofMillis(100L)).
doAfterRetry(retrySignal -> log.info(retrySignal.totalRetries()).
filter(this::is5xxError())
//is5xxError has logic when to trigger
通过上述更改,我无法实现相同的目标,例如返回 BaseResponse 以获取成功和错误场景以及重试无法按预期工作。
可以帮忙。
答: 暂无答案
评论