JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

SpringCloud中FeignInterceptor用于拦截方法调用服务

wys521 2024-10-27 15:13:40 精选教程 30 ℃ 0 评论

一,Feign

Feign是springcloud中远程调用的一种形式,其实底层也就是http的形式调用的,要想利用Feign写一个拦截器,可以做一些特殊的处理,比如可以想nginx一样,指定访问的路径服务的转发,也可以做一些请求头等一些处理

二,FeignInterceptor处理服务转发

FeignServiceUrlConfig

@Configuration
@RefreshScope
@ConfigurationProperties("feign.service")
public class FeignServiceUrlConfig {
    /**
     * key为服务名,value为接口对应的方法名+地址
     */
    private Map<String, Map<String, String>> url;

    public Map<String, Map<String, String>> getUrl() {
        return url;
    }

    public void setUrl(Map<String, Map<String, String>> 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<String, Map<String, String>> 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"}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表