SpringCloud

SpringCloud实战四-Feign

2020-05-28  本文已影响0人  坏男坏男

什么是Feign

之前文章的本地调用使用的是SpringBoot的RestTemplate进行调用, 存在可读性差,不够“优雅”等缺点。

Feign是Netflix开源的声明式HTTP客户端,简化了HTTP Client的编写,下面简单的用代码解释一下什么是“声明式”。

引入依赖:

org.springframework.cloudspring-cloud-starter-openfeign

在启动类添加注解:

@EnableFeignClients

创建一个接口:

@FeignClient(name ="user-center")publicinterfaceUserCenterFeignClient{/**     * http://user-center/users/{id}*@paramid*@return    */@GetMapping("/users/{id}")UserDTO findById(@PathVariableInteger id);}

调用:

UserDTO userDTO =this.userCenterFeignClient.findById(userId);

此时我们已经完成Feign的调用。“声明式”即在接口上写上注解便可以达到本地调用的目的。

细粒度及全局配置

Feign的配置和Ribbon的配置很像,均支持Java Config配置和属性文件的配置,以日志级别(默认没有打印日志,NONE)配置为例

细粒度配置

Java Config配置

@FeignClient(name ="user-center", configuration = FeignConfiguration.class)publicinterfaceUserCenterFeignClient

publicclassFeignConfiguration{@BeanpublicLogger.Levellevel(){// 让feign打印所有请求的细节returnLogger.Level.FULL;    }}

b.属性文件配置

feign:client:config:user-center:        loggerLevel: full

2.全局配置

    a.Java Config配置

    启动文件加注解

@EnableFeignClients(defaultConfiguration = GlobalFeignConfiguration.class)publicclassContentCenterApplication

publicclassGlobalFeignConfiguration{@BeanpublicLogger.Levellevel(){// 让feign打印所有请求的细节returnLogger.Level.FULL;    }}

b.属性文件

feign:client:config:      # 全局配置default:        loggerLevel: full

tips:Feign默认支持负载均衡

Feign优化

微服务的优化很多,这里只做一些小的优化:

1.配置连接池(支持httpClients和okHttp,默认是URLConnection)

 2.修改日志级别(尽量不用FULL)

配置连接池apache httpClients

添加依赖:

io.github.openfeignfeign-httpclient

添加配置:

feign:httpclient:    # 让feign使用apache httpclient做请求;而不是默认的urlconnectionenabled:true    # feign的最大连接数max-connections:200    # feign单个路径的最大连接数max-connections-per-route:50

传参

Feign与SpringMvc的传参类似,支持@PathVariable,@RequestBody等注解,可以在maven中添加一个模块,在需要的模块中引入,让controller实现Feign模块中的接口,便于维护。

后续

目前看来,微服务的调用基本完成,后续将介绍服务容错-Sentinel、消息驱动Spring Cloud Alibaba RocketMQ以及API网关-Spring Cloud Gateway。

上一篇下一篇

猜你喜欢

热点阅读