概述
SpringCloud中的服务调用组件
- 一 Ribbon+restTemplate服务调用
- 1.1 restTemplate是啥
- 1.2 Ribbon
- 1.2.1 Ribbon基础
- 1.2.1.1 什么是Ribbon?
- 1.2.1.2 Ribbon的主要作用
- 1.2.1.2.1 服务调用
- 1.2.1.2.2 负载均衡
- 1.2.1 Ribbon进阶
- 1.2.2.1 负载均衡概述
- 1.2.2.2 基于Ribbon实现负载均衡策略
- 1.2.2.2.1 Ribbon内置的负载均衡策略
- 1.2.2.2.1 内置负载均衡策略的配置文件的修改
- 1.2.2.3 Ribbon的重试机制
- 1.2.2.3.1 来源
- 1.2.2.3.1 使用步骤
- 1.2.2.4 Ribbon中负载均衡的源码解析
- 1.2.2.5.1 Ribbon中的关键组件
- 1.2.2.5.2 @LoadBalanced注解
- 二 Feign 服务调用
- 2.1 基础知识
- 2.1.1 简介
- 2.1.1.1 是个啥?
- 2.1.1.2 作用
- 2.1.2 基于Feign的服务调用案例中注意事项
- 2.1.3 Feign与Ribbon的联系
- 2.1.4 负载均衡
- 2.2 进阶知识
- 2.2.1 Feign的配置
- 2.2.1 Feign的请求压缩
- 2.2.1 Feign的日志级别
- 2.2.1 Feign的源码分析
- 3.服务调用的总结
一 Ribbon+restTemplate服务调用
1.1 restTemplate是啥
RestTemplate是由Spring提供的模版,可以在启动类中配置get方法,创建一个它的对象,然后使用的时候注入就可以了;RestTemplate是处理http请求的相关的工具类
1.2 Ribbon
1.2.1 Ribbon基础
1.2.1.1 什么是Ribbon?
Netflixfa 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。在 SpringCloud 中, Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Eureka中读 取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。
1.2.1.2 Ribbon的主要作用
1.2.1.2.1 服务调用
基于Ribbon实现服务调用, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助 RestTemplate 最终进行调用
1.2.1.2.2 负载均衡
当有多个服务提供者时,Ribbon可以根据负载均衡的算法自动的选择需要调用的服务地址
1.2.1 Ribbon进阶
1.2.2.1 负载均衡概述
负载均衡是一种基础的网络服务,其原理是通过运行在前面的负载均衡服务,按照指定的负载均衡算法,将流量分配到后端服务集群上,从而为系统提供并行扩展的能力。
负载均衡分类
服务端负载均衡(常见nginx)
先发送请求到负载均衡服务器或者软件,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端再进行负载均衡算法分配
客户端负载均衡(常见ribbon)
客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,这是客户端负载均衡;即在客户端就进行负载均衡算法分配
1.2.2.2 基于Ribbon实现负载均衡策略
1.2.2.2.1 Ribbon内置的负载均衡策略
- com.netflix.loadbalancer.RandomRule :随机策略
- com.netflix.loadbalancer.RetryRule :重试策略。
- com.netflix.loadbalancer.WeightedResponseTimeRule :权重策略。会计算每个服务的权重,越高的被调用的可能性越大
- com.netflix.loadbalancer.BestAvailableRule :最佳策略。遍历所有的服务实例,过滤掉故障实例,并返回请求数最小的实例返回。
- com.netflix.loadbalancer.AvailabilityFilteringRule :可用过滤策略。过滤掉故障和请求数超过阈值的服务实例,再从剩下的实力中轮询调用。
1.2.2.2.1 内置负载均衡策略的配置文件的修改
需要调用的微服务名称 shop-service-product:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
1.2.2.3 Ribbon的重试机制
1.2.2.3.1 来源
消费者可用调用服务A/B,但是由于A可能发生宕机等状况,当ribbon负载均衡到宕机的微服务上时,消费者就拿不到数据 还会产生异常,这时候ribbon提供了一种重制机制(消费者指定的一系列参数(请求连接的超时时间 返回数据的时间)范围内,超过就换请求)
1.2.2.3.1 使用步骤
- 引入spring重试组件 :spring-retry
- 对ribbon进行配置
1.2.2.4 Ribbon中负载均衡的源码解析
1.2.2.5.1 Ribbon中的关键组件
关键组件图:
组件解释:
- ServerList:可以响应客户端的特定服务的服务器列表。
- ServerListFilter:可以动态获得的具有所需特征的候选服务器列表的过滤器。
- ServerListUpdater:用于执行动态服务器列表更新。
- Rule:负载均衡策略,用于确定从服务器列表返回哪个服务器。
- Ping:客户端用于快速检查服务器当时是否处于活动状态。
- LoadBalancer:负载均衡器,负责负载均衡调度的管理。
1.2.2.5.2 @LoadBalanced注解
通过注释可以知道@LoadBalanced注解是用来给RestTemplate做标记,方便我们对RestTemplate添加 一个LoadBalancerClient,以实现客户端负载均衡。
二 Feign 服务调用
2.1 基础知识
2.1.1 简介
2.1.1.1 是个啥?
Feign是Netflix开发的声明式,模板化的HTTP客户端
2.1.1.2 作用
- Feign可帮助我们更加便捷,优雅的调用HTTP API。
- 在SpringCloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了
- Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
- SpringCloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka, 从而让Feign的使用更加方便。
2.1.2 基于Feign的服务调用案例中注意事项
- 添加一个@EnableFeignClients注解
- 再添加一个@FeignClient 用于激活Feign客户端
//指定需要调用的微服务名称 @FeignClient(name="shop-service-product") public interface ProductFeginClient {
//调用的请求路径
@RequestMapping(value = "/product/{id}",method = RequestMethod.GET) public Product findById(@PathVariable("id") Long id);
}
- 配置请求提供者的调用接口.
2.1.3 Feign与Ribbon的联系
ribbon是啥
Ribbon是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。它可以 在客户端 配置RibbonServerList(服务端列表),使用 HttpClient 或 RestTemplate 模拟http请求,步骤相当繁琐
feign是啥
Feign 是在 Ribbon的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。采用接口的 方式, 只需要创建一个接口,然后在上面添加注解即可 ,将需要调用的其他服务的方法定义成抽象方 法即可, 不需要自己构建http请求。然后就像是调用自身工程的方法调用,而感觉不到是调用远程方 法,使得编写客户端变得非常容易
2.1.4 负载均衡
Feign中本身已经集成了Ribbon依赖和自动配置,因此我们不需要额外引入依赖,也不需要再注册 RestTemplate 对象。
2.2 进阶知识
2.2.1 Feign的配置
Feign支持使用属性:
- feignName: FeginClient的名称
- connectTimeout : 建立链接的超时时长 readTimeout : 读取超时时长
- loggerLevel: Fegin的日志级别
- errorDecoder : Feign的错误解码器
- retryer : 配置重试
- requestInterceptors : 添加请求拦截器
- decode404 : 配置熔断不处理404异常
2.2.1 Feign的请求压缩
Spring Cloud Feign 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗
对应配置:
feign:
compression:
request:
enabled: true # 开启请求压缩
mime-types: text/html,application/xml,application/json # 设置压缩的数据类型 min-request-size: 2048 # 设置触发压缩的大小下限
response:
enabled: true # 开启响应压缩
2.2.1 Feign的日志级别
属性配置方式来达到日志效果
对应配置:
feign:
client:
config:
shop-service-product:
loggerLevel: FULL
logging:
level:
cn.itcast.order.fegin.ProductFeginClient: debug
属性解释:
logging.level.xx : debug : Feign日志只会对日志级别为debug的做出响应
feign.client.config.shop-service-product.loggerLevel : 配置Feign的日志Feign有四种日志级别:
1. NONE【性能最佳,适用于生产】:不记录任何日志(默认值)
2. BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间
3. HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
4. FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数 据
2.2.1 Feign的源码分析
@EnableFeignClients和@FeignClient两个注解就实现了Feign的功能,也是通过spring的自动装载实现的
3.服务调用的总结
Ribbon+RestTemplate
1. 通过Ribbon结合RestTemplate方式进行服务调用只需要在声明RestTemplate的方法上添加注解 @LoadBalanced即可
2. 可以通过 {服务名称}.ribbon.NFLoadBalancerRuleClassName 配置负载均衡策略
Feign
1. 服务消费者引入 spring-cloud-starter-openfeign 依赖
2. 通过 @FeignClient 声明一个调用远程微服务接口
3. 启动类上通过 @EnableFeignClients 激活Feign
最后
以上就是难过饼干为你收集整理的SpringCloud中的服务调用组件一 Ribbon+restTemplate服务调用二 Feign 服务调用3.服务调用的总结的全部内容,希望文章能够帮你解决SpringCloud中的服务调用组件一 Ribbon+restTemplate服务调用二 Feign 服务调用3.服务调用的总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复