博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring feign使用笔记
阅读量:5820 次
发布时间:2019-06-18

本文共 3769 字,大约阅读时间需要 12 分钟。

hot3.png

开启日志支持

@Bean    public Logger.Level feignLoggerLevel() {        return Logger.Level.FULL;    }

源码:

package feign;...  public enum Level {    /**     * No logging.     */    NONE,    /**     * Log only the request method and URL and the response status code and execution time.     */    BASIC,    /**     * Log the basic information along with request and response headers.     */    HEADERS,    /**     * Log the headers, body, and metadata for both requests and responses.     */    FULL  }...

使用http client发起请求,替换原生的connection

加入dependency,自动注入使用httpclient

io.github.openfeign
feign-httpclient
9.5.0
org.apache.httpcomponents
httpclient
4.5.3

查看源码 spring-cloud-netflix-core-1.3.1.RELEASE.jar,可以明显看到如下代码,当存在ApacheHttpClient.class...

org.springframework.cloud.netflix.feign.ribbon;,,,public class FeignRibbonClientAutoConfiguration{    ...	@Configuration	@ConditionalOnClass(ApacheHttpClient.class)	@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true)	protected static class HttpClientFeignLoadBalancedConfiguration {		@Autowired(required = false)		private HttpClient httpClient;		@Bean		@ConditionalOnMissingBean(Client.class)		public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,				SpringClientFactory clientFactory) {			ApacheHttpClient delegate;			if (this.httpClient != null) {				delegate = new ApacheHttpClient(this.httpClient);			}			else {				delegate = new ApacheHttpClient();			}			return new LoadBalancerFeignClient(delegate, cachingFactory, clientFactory);		}	},,,

feign 执行逻辑

1 将FeignClient注解的interface 交由feign.ReflectiveFeign创建代理feign.ReflectiveFeign.FeignInvocationHandler.

2 method代理feign.InvocationHandlerFactory.MethodHandler.默认是SynchronousMethodHandler实现类,执行method时,调用executeAndDecode第一行,顺序调用拦截器.

...  Object executeAndDecode(RequestTemplate template) throws Throwable {    Request request = targetRequest(template);...  Request targetRequest(RequestTemplate template) {    for (RequestInterceptor interceptor : requestInterceptors) {      interceptor.apply(template);    }    return target.apply(new RequestTemplate(template));  }...

3 然后交由 client执行http请求,client有不同实现,具体可看上面FeignRibbonClientAutoConfiguration

FeignClient注解

  • value,name: 二选一,都是一个东西.可以注入

  • serviceId: 过期了.

  • url: 不用多说,可以注入(注:一个cloud集群可以不用url,会自动根据name去找集群中服务发起请求)

  • configuration: 只对当前fegin生效的配置,而不是全局配置.(注:该类不要被扫描注入了)

  • fallback: 失败回调

  • path: 该path会作为method上path的前缀

其他参数略

例:

@Slf4jpublic class UserFeignConfiguration {    @Value("${spring.application.name:}")    private String applicationName;    @Bean    public RequestInterceptor userInterceptor() {        log.info("--------定义RequestInterceptor");        RequestInterceptor requestInterceptor = new RequestInterceptor() {            @Override            public void apply(RequestTemplate template) {                template.header("sysCode", applicationName);            }        };        return requestInterceptor;    }}@FeignClient(value = "token", url = "${nirvana.user.url}/v2", configuration = UserFeignConfiguration.class,fallback = TokenRemoteService.TokenRemoteServiceFallback.class)public interface TokenRemoteService {    @PostMapping(value = "/queryToken")    Result
queryToken(TokenBean tokenBean); @Component @Slf4j class TokenRemoteServiceFallback implements TokenRemoteService{ @Override public Result
queryToken(TokenBean tokenBean) { log.info("TokenRemoteServiceFallback"); return null; } }}

转载于:https://my.oschina.net/superwen/blog/1439095

你可能感兴趣的文章
将txt文件转化为json进行操作
查看>>
线性表4 - 数据结构和算法09
查看>>
C语言数据类型char
查看>>
Online Patching--EBS R12.2最大的改进
查看>>
Binary Search Tree Iterator leetcode
查看>>
uva-317-找规律
查看>>
Event事件的兼容性(转)
查看>>
我的2014-相对奢侈的生活
查看>>
zoj 2412 dfs 求连通分量的个数
查看>>
Java设计模式
查看>>
一文读懂 AOP | 你想要的最全面 AOP 方法探讨
查看>>
Spring Cloud 微服务分布式链路跟踪 Sleuth 与 Zipkin
查看>>
ORM数据库框架 SQLite 常用数据库框架比较 MD
查看>>
华为OJ 名字美丽度
查看>>
微信公众号与APP微信第三方登录账号打通
查看>>
onchange()事件的应用
查看>>
Windows 下最佳的 C++ 开发的 IDE 是什么?
查看>>
软件工程师成长为架构师必备的十项技能
查看>>
python 异常
查看>>
百度账号注销
查看>>