Ribbon+Feign(负载均衡策略/远程调用)
2021-03-11 18:47:59 0 举报
AI智能生成
Ribbon+Feign(负载均衡策略/远程调用)
作者其他创作
大纲/内容
阅读导航
注册中心 Eureka 👉
负载均衡 Ribbon + Feign
断路器 Hystrix 👉
服务网关 Gateway 👉
Ribbon
负载均衡:就是将用户的请求平摊到多个服务器上,从而达到系统的HA(高可用)
分类
服务端负载均衡,客户端所有请求都交给Nginx负载均衡服务器,然后由Nginx转发请求(集中式LB)
客户端负载均衡,先从注册中心获取服务列表,然后再通过Ribbon选择调用(进程式LB)
作用
客户端负载均衡机制(在配置RestTemplate时添加@LoadBalance注解)
Ribbon+RestTemplate通过【服务名】实现服务调用
工作流程
第一步:先选择EurekaServer ,它优先选择在同一个区域内负载较少的server
第二步:再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址
负载均衡策略
Ribbon提供了7种策略:轮询(默认)、随机、重试、根据响应时间加权、过滤跳闸、过滤故障、复合判断
Ribbon默认轮询负载均衡算法原理
调用次数对服务器个数取余,获取下标
服务重启后调用次数从 1 重新开始计数
核心组件-IRule
如何替换负载规则?
方法一
直接在消费方配置文件中指定规则
方法二
建一个规则包,不要放在@ComponentScan扫描的包下
创建规则配置类,添加@Configutation+@Bean注解
在启动类添加@RibbonClient注解,指定服务名和配置类
如何自定义规则?
注释掉@LoadBalance注解,使默认的规则失效,仿照源码编写
面向接口编程,新建负载均衡接口,定义获取所有服务列表的方法
定义实现类,编写负载均衡逻辑,返回计算后的服务器实例对象
在Controller中注入接口对象,调用接口对象中获取实例的方法
获取服务器实例对象的URL,通过RestTemplate或者Feign调用
Feign
只需要写一个【接口】在接口上添加【注解】就可以完成【客户端】的服务调用
通过添加注解给接口生成动态代理,然后去调用方法的时候会生成http协议格式的请求
feign集成封装了ribbon,通过轮询实现了客户端的负载均衡,使服务调用更加简单
OpenFeign
服务调用
在接口上添加注解FeignClient(value="服务名"),将服务端Controller中
的方法头拷贝到接口中,在客户端Controller中注入接口实例,完成调用
的方法头拷贝到接口中,在客户端Controller中注入接口实例,完成调用
超时控制
openfeign底层是ribbon,客户端默认等待1秒钟
在application.yml中设置ribbon的超时等待时间
日志增强
Feign提供了日志打印功能,可以调整日志级别,对接口的调用情况进行监控
日志级别
NONE:【默认】不显示任何日志
BASIC:仅记录请求方法、URL、响应状态码及执行时间
HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息
FULL:除了BASIC中定义的信息之外,还有请求和响应的正文及元数据
代码实现
创建配置类
配置application.yml
0 条评论
下一页