OpenFeign学习(五):OpenFeign请求结果处理及重试控制

#说明
在上篇博文《OpenFeign学习(四):OpenFeign的方法同步请求执行》一文中,我对OpenFeign的同步请求的执行的原理进行了介绍和学习。本篇博文我将继续通过源码对请求之后结果的封装解码及失败重试进行介绍和学习。

正文

在上篇博文中提到,OpenFeign通过SynchronousMethodHandler进行同步方法请求处理,在介绍executeAndDecode方法源码时,只介绍了请求执行部分。接下来,我们继续通过源码来了解在请求结束后,OpenFeign如何对请求结果进行处理。

在阅读executeAndDecode源码时,我们再回顾下通过配置的Client进行实际请求执行的excute方法,这里我通过OkHttpClient进行请求。

Client.execute

public Response execute(feign.Request input, Options options) throws IOException {
    okhttp3.OkHttpClient requestScoped;
    if (this.delegate.connectTimeoutMillis() == options.connectTimeoutMillis() && this.delegate.readTimeoutMillis() == options.readTimeoutMillis() && this.delegate.followRedirects() == options.isFollowRedirects()) {
        requestScoped = this.delegate;
    } else {
        requestScoped = this.delegate.newBuilder().connectTimeout((long)options.connectTimeoutMillis(), TimeUnit.MILLISECONDS).readTimeout((long)options.readTimeoutMillis(), TimeUnit.MILLISECONDS).followRedirects(options.isFollowRedirects()).build();
    }

    Request request = toOkHttpRequest(input);
    okhttp3.Response response = requestScoped.newCall(request).execute();
    return toFeignResponse(response, input).toBuilder().request(input).build();
}

可以看到在请求结束后,通过toFeignResponse方法将不同客户端的请求结果统一封装为OepnFeign的Response。

toFeignResponse(response, input).toBuilder().request(input).build();

这里在阅读源码时,我不理解的是通过toFeignResonse方法已经为Response设置了请求的Request,但在后续中又通过构造器重新设置Request并重新创建了Response实例。

private static Response toFeignResponse(okhttp3.Response response, feign.Request request) throws IOException {
    return Response.builder().status(response.code()).reason(response.message()).request(request).headers(toMap(response.headers())).body(toBody(response.body())).build();
}

结果封装完毕后返回executeAndDecode方法,开始对请求结果进行处理。

executeAndDecode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值