一,feign 和ribbon 的联系
- Ribbon是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。它可以 在客户端 配置 RibbonServerList(服务端列表),使用 HttpClient 或 RestTemplate 模拟http请求,步骤相当繁琐。
- Feign 是在 Ribbon的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。采用接口的 方式, 只需要创建一个接口,然后在上面添加注解即可 ,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求。然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常容易
二,feign 负载均衡
Feign中本身已经集成了
Ribbon依赖和自动配置,因此我们不需要额外引入依赖,也不需要再注册RestTemplate
对象。另外,我们可以像上节课中讲的那样去配置
Ribbon
,可以通过
ribbon.xx 来进行全局配置。也可以通过
服务名
.ribbon.xx
来对指定服务配置:
启动两个
shop_service_product
,重新测试可以发现使用
Ribbon
的轮询策略进行负载均衡
Feign 是可以更加方便让服务消费者请求服务提供者,并且自带了ribbon 的轮询策略 ,如果想改变负载均衡策略。可以在配置文件里添加ribbon配置,来改变负载均衡策略。
feign:
client:
config:
feignName: ##定义FeginClient的名称
connectTimeout: 5000 # 相当于Request.Options
readTimeout: 5000 # 相当于Request.Options
# 配置Feign的日志级别,相当于代码配置方式中的Logger
loggerLevel: full # Feign的错误解码器,相当于代码配置方式中的ErrorDecoder
errorDecoder: com.example.SimpleErrorDecoder #配置重试,相当于代码配置方式中的Retryer
retryer: com.example.SimpleRetryer # 配置拦截器,相当于代码配置方式中的RequestInterceptor
requestInterceptors:
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
decode404: false
- feignName:FeginClient的名称
- connectTimeout : 建立链接的超时时长
- readTimeout : 读取超时时长
- loggerLevel: Fegin的日志级别
- errorDecoder :Feign的错误解码器
- retryer : 配置重试
- requestInterceptors : 添加请求拦截器
- decode404 : 配置熔断不处理404异常