说明:Feign和RestTemplate一样,是用于微服务之间通信的,配合注册中心技术Nacos,可以搭建一个完整的SpringCloud环境。本文介绍在Nacos+Feign环境下,Feign的使用。
环境介绍:创建两个服务,订单服务、用户服务,查询订单时,订单服务会发请求给用户服务,查询该订单对应的用户信息,注册中心Nacos已搭建完成。
使用
第一步:添加依赖
首先,在发送请求的服务方(订单服务,向用户服务发送请求),添加openfeign依赖
<!--openfeign依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
第二步:编写客户端接口
创建一个包feignclients包,里面放对应请求接收方服务的Controller接口,注意请求路径和参数列表:
-
请求路径:服务端Controller方法路径可能是类上+方法上拼接的,而Feign客户端接口需要的是完整路径;
-
参数列表:服务端Controller方法对于键值对的参数可以直接根据参数名接收,而Feign客户端接口接收的参数是json格式的,需要加@RequestParam注解
类上加@FeignClient()注解,注解内填对应的服务名称,可在nacos上复制过来
第三步:添加注解
在启动类上添加,@EnableFeignClients()注释,注释内填Feign客户端接口的全限定包名
第四步:使用
在需要使用的类中,装配客户端接口,然后直接调用对应的方法就可以了。
查询成功,如果请求失败,需要检查发送请求的服务和接收请求的服务是否在同一个命名空间内;
Feign配置
日志配置
# 开启日志功能
logging:
level:
com.hzy: debug
feign:
client:
config:
# default全局的配置
default:
# 日志级别,BASIC就是基本的请求和响应信息
loggerLevel: FULL
# Feign客户端远程调用业务超时时间
readTimeout: 3000
# Feign客户端远程调用连接超时时间
connectTimeout: 3000
其中,日志级别有以下分类:
-
NONE:不记录任何日志信息,默认值;
-
BASIC:仅记录请求的方法,URL以及响应状态码和执行时间;
-
HEADERS:在BASIC的基础上,额外记录请求和响应的头信息;
-
FULL:记录所有请求和响应的明细,包括头信息、请求体、原数据;
降级处理方案配置
Feign降级处理方案设置,参考:http://t.csdn.cn/tcezs
feign:
client:
# 微服务保护的组件 熔断器
hystrix:
enabled: true
连接池优化配置
Feign默认使用的URLConnection连接,不支持连接池,可以使用HttpClient作为连接池使用;
使用前需要添加HttpClient依赖
<!--httpClient依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
feign:
client:
httpclient:
# 开启feign对HttpClient的支持
enabled: true
# 最大的连接数
max-connections: 200
# 每个路径的最大连接数 线程隔离
max-connections-per-route: 50
总结
Feign代替了RestTemplate的作用