RestTemplate是由Spring提供的模版,可以在启动类中配置get方法,创建一个它的对象,然后使用的时候注入就可以了;RestTemplate是处理http请求的相关的工具类
Netflixfa 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。在 SpringCloud 中, Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Eureka中读 取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。
基于Ribbon实现服务调用, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助 RestTemplate 最终进行调用
当有多个服务提供者时,Ribbon可以根据负载均衡的算法自动的选择需要调用的服务地址
负载均衡是一种基础的网络服务,其原理是通过运行在前面的负载均衡服务,按照指定的负载均衡算法,将流量分配到后端服务集群上,从而为系统提供并行扩展的能力。
负载均衡分类
服务端负载均衡(常见nginx)
先发送请求到负载均衡服务器或者软件,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端再进行负载均衡算法分配
客户端负载均衡(常见ribbon)
客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,这是客户端负载均衡;即在客户端就进行负载均衡算法分配
需要调用的微服务名称 shop-service-product:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
消费者可用调用服务A/B,但是由于A可能发生宕机等状况,当ribbon负载均衡到宕机的微服务上时,消费者就拿不到数据 还会产生异常,这时候ribbon提供了一种重制机制(消费者指定的一系列参数(请求连接的超时时间 返回数据的时间)范围内,超过就换请求)
通过注释可以知道@LoadBalanced注解是用来给RestTemplate做标记,方便我们对RestTemplate添加 一个LoadBalancerClient,以实现客户端负载均衡。
Feign是Netflix开发的声明式,模板化的HTTP客户端
//指定需要调用的微服务名称 @FeignClient(name="shop-service-product") public interface ProductFeginClient {
//调用的请求路径
@RequestMapping(value = "/product/{id}",method = RequestMethod.GET) public Product findById(@PathVariable("id") Long id);
}
ribbon是啥
Ribbon是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。它可以 在客户端 配置RibbonServerList(服务端列表),使用 HttpClient 或 RestTemplate 模拟http请求,步骤相当繁琐
feign是啥
Feign 是在 Ribbon的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。采用接口的 方式, 只需要创建一个接口,然后在上面添加注解即可 ,将需要调用的其他服务的方法定义成抽象方 法即可, 不需要自己构建http请求。然后就像是调用自身工程的方法调用,而感觉不到是调用远程方 法,使得编写客户端变得非常容易
Feign中本身已经集成了Ribbon依赖和自动配置,因此我们不需要额外引入依赖,也不需要再注册 RestTemplate 对象。
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 # 开启响应压缩
属性配置方式来达到日志效果
对应配置:
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和元数 据
@EnableFeignClients和@FeignClient两个注解就实现了Feign的功能,也是通过spring的自动装载实现的
Ribbon+RestTemplate
1. 通过Ribbon结合RestTemplate方式进行服务调用只需要在声明RestTemplate的方法上添加注解 @LoadBalanced即可
2. 可以通过 {服务名称}.ribbon.NFLoadBalancerRuleClassName 配置负载均衡策略
Feign
1. 服务消费者引入 spring-cloud-starter-openfeign 依赖
2. 通过 @FeignClient 声明一个调用远程微服务接口
3. 启动类上通过 @EnableFeignClients 激活Feign