feign是一个用于服务间api调用的组件
基础使用
导入依赖
<!-feign依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.10.RELEASE</version>
</dependency>
在需要调用接口的模块创建Feign服务API接口
在接口上添加@FeignClient注解来调用需要的接口,并且加了这个注解之后就不需要在此加@Component、@service等注解。注意!请求方式要与被请求的接口相同,参数注解也要与被请求接口相同,否则发送的数据会为null。
name:注册的服务名称
url:请求的地址
path:地址后面拼接的路径
configuration:Feign定义的配置类
下图是被调用的controller的路径
下图是调用其他服务接口的controller
在标注了@FeignClient注解的模块的启动类上加入@EnableFeignClients注解来启动feign注解配置,如果找不到接口则可以在该注解的参数加入包扫描(basePackages = "包路径"),但是加入包扫描后@ComponentScan()包扫描注解可能会失效。
如果显示No qualifying bean of type ‘org.springframework.boot.autoconfigure.http.HttpMessage之类的找不到bean的异常则需要注入以下的bean,
因为可能是在gateway下整合feign,SpringCloud中通过Feign接口实现服务的远程调用,对于数据的序列化和反序列化依旧借助了HttpMessageConverter(消息转换器),Spring Cloud Gateway是基于WebFlux的,是ReactiveWeb。所以HttpMessageConverters不会自动注入。
@Bean
@ConditionalOnMissingBean
public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) {
return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));
}
基础配置
feign:
compression:
request:
# 配置请求支持GZIP压缩,默认为false
enabled: true
#配置压缩支持的Mime Type
mime-types: text/xml,application/xml,application/json
# 配置压缩数据大小的上下限
min-request-size: 1024
response:
#配置响应支持GZIP压缩,默认为false
enabled: true
#解析GZIP格式
useGzipDecoder: true
httpclient:
connection-timeout: 2000
enabled: true
client:
# 修改默认配置的名称 默认名default
default-config: default
config:
# feign的名称
feign-name:
# 连接超时时间
connection-timeout: 5000
# 读取超时时间
read-timeout: 5000
# 日志配置级别
logger-level: full
# 重试机制
retryer: feign.Default