文章目录
SpringCloud总架构图
一、简介
- 负载均衡的概念
- Feign概念
二、入门案例
- 导入依赖
- Feign的客户端
- 调用Feign
- 开启Feign功能
- 启动测试
- Feign实现原理简单分析
三、负载均衡(Ribbon)
四、熔断器支持
五、请求压缩和响应压缩
六、配置日志级别
SpringCloud 架构图
Springcloud 常见的集成方式是使用Feign + Ribbon 来完成服务间远程调用及负载均衡:
1.微服务启动时,会向服务注册中心商报四针实例信息,这里ServiceB包含多个实例。每个实例包括:IP地址、端口信息等配置信息
2.微服务会定期从Nacos获取服务实例列表
3.当ServiceA调用ServiceB时,Ribbon组件从本地服务实例列表中查找ServiceB的实例,如获取了多个实例如:Instance1、Instance2.这时Ribbon会通过用户所配置的负载均衡政策从中选择一个实例
4.最终,Feign组件会通过Ribbon选取的实例发送http请求
采用 Feign + Ribbon 的整合方式,是由Feign完成远程调用的整个流程、而Feign集成了Ribbon,Feign使用Ribbon,来完成调用实例的负载均衡
一、简介
1.负载均衡的概念
在SpringCloud服务协议流程中,ServiceA通过负载均衡调用ServiceB,接下来了解下负载均衡:
负载均衡就是将用户请求通过一定的策略,分摊在多个服务实例执行,它是系统处理高并发、缓解网络压力和进行服务端扩容的重要手段之一,它分为
服务端负载均衡和客户端负载均衡
服务端负载均衡:
客户端负载均衡:
2.Feign概念
Feign英文为"伪装、假装"意思,是一个http请求调用的轻量级框架,是以java接口注解的方式调用Http请求,而不用像Java中通过封装Http请求报文的方式直接调用。
Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进行转化成真正的请求,这种请求相对而言比较直观。
Feign被广泛应用在Spring cloud的解决方案中,是学习基于SpringCloud微服务架构不可或缺的重要组件。
封装了Http调用流程,更符合面向接口化的编程习惯
二、入门案例
使用Feign替代RestTemplate发送Rest请求,使之更符合面向接口化的编程习惯。
实现步骤:
1.导入feign依赖步骤
2.编写Feign客户端接口
3.消费者启动引导类开启Feign功能注解
4.访问接口测试
实现过程:
1.导入依赖
2.Figen的客户端
在项目启动类添加注解@EnableFeignClients,启用feign客户端
在SomsFeign中编写客户端接口端 SomsFeign,即接口将是被调用
esc-finder为其他模块服务名称,contract为其他模块控制层父路径,getServiceProduct为具体接口信息、参数等等
Feign会通过动态代理,帮我们生成实现类。
注解@FeignClient声明Feign的客户端,指明服务名称
接口定义的方法,采用SpringMVC的注解。Feign会根据注解帮我们生成URL地址
3.调用Feign
4.Feign实现原理简单分析
Feign帮我们做了哪些事儿:
在 声明Feign客户端 之后,Feign会根据@FeignClient注解使用java的动态代理技术生成代理类,在这里我们指定@FeignClient value为serviceB,则说明这个类的远程目标为spring cloud的服务名称为serviceB的微服务。
serviceB的具体访问地址,Feign会交由ribbon获取,若该服务有多个实例地址,ribbon会采用指定的负载均衡策略选取实例。
Feign兼容spring的web注解(如:@GetMapping),它会分析声明Feign客户端方法中的Spring注解,得出Http请求method、参数信息以及返回信息结构。
当业务调用Feign客户端方法时,会调用代理类,根据以上分析结果,由代理类完成实际的参数封装、远程http请求,返回结果封装等操作。
三、负载均衡
Ribbon核心组件IRule是负载均衡策略接口,它有如下实现,大家仅做了解:
RoundRobinRule(默认):轮询,即按一定的顺序轮换获取实例的地址。
RandomRule:随机,即以随机的方式获取实例的地址。
AvailabilityFilteringRule: 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,以及并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问;
WeightedResponseTimeRule: 根据平均响应时间计算所有服务的权重,响应时间越快,服务权重越大,被选中的机率越高; 刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够时,会切换到WeightedResponseTimeRule
RetryRule: 先按照RoundRobinRule的策略获取服务,如果获取服务失败,则在指定时间内会进行重试,获取可用的服务;
BestAvailableRule: 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务;
ZoneAvoidanceRule: 默认规则,复合判断server所在区域的性能和server的可用性选择服务器;
可通过在配置文件中修改默认的负载均衡策略:
account‐service.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
account-service
是调用的服务的名称,后面的组成部分是固定的
四、熔断器支持
Feign本身也集成Hystrix熔断器,starter内查看
服务降级方法实现步骤:
1.在配置文件application.yml中开启feign熔断器支持
2.编写FalBack处理类,实现FeignClient客户端
3.在@FeignClient注解中,指定FallBack处理类
4,测试服务降级效果
实现过程:
1.配置
2.定义一个类ConsumerServiceImpl,实现刚才编写的ConsumerService,作为FallBack的处理类
3. 在@FeignClient注解中,指定FallBack处理类
4.测试