Coup de Grace

扩展resttemplate功能

因为鸽子了很久导致我都有点忘了为什么要定制 RestTemplate 功能而不是直接用 Feign 或者 retrofit 了…


翻开源码

public class RestTemplate extends InterceptingHttpAccessor implements RestOperations

先说这个RestOperations接口,可以看到里面的 rest 操作.

再说说这个InterceptingHttpAccessor父类,里面

public void setInterceptors(List<ClientHttpRequestInterceptor> interceptors) {
   this.interceptors = interceptors;
}

@Override
public ClientHttpRequestFactory getRequestFactory() {
   ClientHttpRequestFactory delegate = super.getRequestFactory();
   if (!CollectionUtils.isEmpty(getInterceptors())) {
      return new InterceptingClientHttpRequestFactory(delegate, getInterceptors());
   }
   else {
      return delegate;
   }
}

定义了拦截器设定,并且重写了父类中获取HttpRequestFactory的部分来实现新的客户端wrap旧的功能.

我们自行实现ClientHttpRequestInterceptor来intercept 去扩展 access 能力.

点进去看一下注释应该就明白了

线程池有了,线程池内活动对象有了,那么我简单列一下应用场景:

以前引用了下面这段儿嘛.

  1. 服务间没有直接依赖,采用异步化调用,上游服务完成后,发一个消息异步通知下游服务,下游服务成功与否对上游服务没有影响。
  2. 上游服务弱依赖于某个下游服务的处理结果,可降级。降级时可以不返回这部分的数据。同步调用降级时转为异步。
  3. 上下游微服务强依赖,上游服务依赖于下游服务的返回或者回调,下游必须正常执行,如果下游服务失败了,本次请求判定为失败。

最后再来看 RestTemplate 实现里其他的部分:

见文知意.


done.