Bootstrap

springcloud理解及使用

文章目录

SpringCloud总架构图

一、简介

  1.  负载均衡的概念
  2.  Feign概念

二、入门案例

  1. 导入依赖
  2. Feign的客户端
  3. 调用Feign
  4. 开启Feign功能
  5. 启动测试
  6. 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.测试

;