使用步骤
第一步导入feign依赖
<!-- Spring Cloud 微服务负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!-- Spring Cloud 微服务远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
第二步在配置文件中配置feign
# 开启 feign 的远程调用使用熔断
feign.sentinel.enabled = true
# 配置请求GZIP压缩
feign.compression.request.enabled = true
# 配置压缩数据大小的下限
feign.compression.request.min-request-size = 2048
# 配置响应GZIP压缩
feign.compression.response.enabled = true
# 配置压缩支持的MIME TYPE
feign.compression.request.mime-types[0] = text/xml
feign.compression.request.mime-types[1] = application/xml
feign.compression.request.mime-types[2] = application/json
# 下边的是设置feign调用是的超时时间等等,防止雪崩
#对当前实例的重试次数 default 0
ribbon.MaxAutoRetries = 1
#设置连接超时时间 default 2000
ribbon.ConnectTimeout = 3000
#对所有操作请求都进行重试 default false
ribbon.OkToRetryOnAllOperations = false
#设置读取超时时间 default 5000
ribbon.ReadTimeout = 20000
#切换实例的重试次数 default 1
ribbon.MaxAutoRetriesNextServer = 1
第三步(利用spring的SPI):在resource中创建META-INF,并且META-INF中创建spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xuecheng.api.feign.config.FeignConfig
我的等候右边指向的是我的feign的配置类,这样Spring在启动时,会先去扫描resource.META-INF.spring.factories文件,扫描里面指向的文件,
@Configuration
@ComponentScan(basePackages = {"com.xuecheng.api.feign"}) //这是扫描该路径下需要加入IOC中的类
@EnableFeignClients(basePackages = {"com.xuecheng.api.feign"}) //这是扫描该路径下使用的feign注解的包交给ioc管理
public class FeignConfig {
}
这样spring就会根据spring.factories中指定的路径找到FeignConfig,通过扫描FeignConfig看到有
@EnableFeignClients(basePackages = {"com.xuecheng.api.feign"}) //这是扫描该路径下使用的feign注解的包交给ioc管理
注解,就会去扫描com.xuecheng.api.feign下使用了Feign相关的注解的类。
但是如果配置了熔断,但是熔断并没有使用feign相关的注解所以上边的@EnableFeignClients并不会扫描这个包下没有使用feign相关的注解,那么这时候就需要在FeignConfig中添加注解
@ComponentScan(basePackages = {"com.xuecheng.api.feign"}) //这是扫描该路径下需要加入IOC中的类
将这个路径下的所有 @Componen 衍生出来的需要接入到IOC容器的类交给Spring管理,而熔断类正好在这个路径下,这样就完成了Feign的自动装配
流程:Spring启动 --------> 扫描项目中所有的 resource.META-INF.spring.factories内容------>根据内容找到指定的FeignConfig类 ---------------> 通过FeignConfig中配置的注解@EnableFeignClients扫描feignj接口所在包下所有使用Feign相关的注解的类,添加到IOC中 ------------> 如果有熔断,通过@ComponentScan扫描熔断类所在包下的 所有使用 @Componen 以及衍生注解的类添加到IOC中。
这样就完成了将feign集成到Spring中