一,Feign
Feign是springcloud中远程调用的一种形式,其实底层也就是http的形式调用的,要想利用Feign写一个拦截器,可以做一些特殊的处理,比如可以想nginx一样,指定访问的路径服务的转发,也可以做一些请求头等一些处理
二,FeignInterceptor处理服务转发
FeignServiceUrlConfig
@Configuration
@RefreshScope
@ConfigurationProperties("feign.service")
public class FeignServiceUrlConfig {
/**
* key为服务名,value为接口对应的方法名+地址
*/
private Map> url;
public Map> getUrl() {
return url;
}
public void setUrl(Map> url) {
this.url = url;
}
}
FeignInterceptor
@Configuration
public class FeignInterceptor implements RequestInterceptor {
@Autowired
private FeignServiceUrlConfig feignServiceUrlConfig;
@Override
public void apply(RequestTemplate template) {
String methodName = template.methodMetadata().method().getName();
Target> target = template.feignTarget();
Map> urlMap = feignServiceUrlConfig.getUrl();
if (MapUtils.isNotEmpty(urlMap) && urlMap.containsKey(target.name()) && MapUtils.isNotEmpty(urlMap.get(target.name())) && urlMap.get(target.name()).containsKey(methodName)) {
template.target(urlMap.get(target.name()).get(methodName));
}
}
}
三,配置文件中配置
feign:
service:
url:
file-service: {"upload":"http://127.0.0.1:9204"}