spring cloud openfeign讲解

本文深入讲解了Spring Cloud中的核心组件:Feign的日志级别配置,Ribbon的负载均衡、重试机制和饥饿加载,Hystrix的熔断原理及在Feign中的应用,以及Zuul网关的快速入门、面向服务的路由配置、负载均衡和熔断策略。
摘要由CSDN通过智能技术生成

目标

  1. feign
  2. ribbon
  3. hystrix熔断
  4. zuul网关

1. feign

feign的日志级别

springboot是通过logging.level.xx=debug来设置日志级别。然而这个对Fegin客户端而言不会直接产生效果。因为@FeignClient注解修改的客户端在被代理时,都会创建一个新的Fegin.Logger实例。我们需要额外指定这个日志的级别才可以。

通过对象配置

@Configuration
public class FeignConfig {
   
    @Bean
    Logger.Level feignLoggerLevel(){
   
        return Logger.Level.FULL;
    }
}

或通过配置文件配置

feign:
  client:
    config:
      default:
        loggerLevel: full

这里指定的Level级别是FULL,Feign支持4种级别:

  • NONE:不记录任何日志信息,这是默认值。
  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

2. ribbon

2.1 ribbon负载均衡

负载均衡

https://www.cnblogs.com/gucb/p/11237765.html

ribbon的负载均衡配置

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

SpringBoot也帮我们提供了修改特定服务的负载均衡规则的配置入口:

user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

格式是:{服务名称}.ribbon.NFLoadBalancerRuleClassName,值就是IRule的实现类。

ribbon负载均衡的策略

内置负载均衡规则类 规则描述
RoundRobinRule 简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule 对以下两种服务器进行忽略:(1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。注意:可以通过修改配置loadbalancer..connectionFailureCountThreshold来修改连接失败多少次之后被设置为短路状态。默认是3次。(2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上线,可以由客户端的..ActiveConnectionsLimit属性进行配置。
WeightedResponseTimeRule 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。
BestAvailableRule 忽略哪些短路的服务器,并选择并发数较低的服务器。
RandomRule 随机选择一个可用的服务器。
RetryRule 重试机制的选择逻辑

可以在DynamicServerListLoadBalancer类的构造方法上面打断点,观察应用的策略

如果是需要全局配置的话,可以通过一个配置类创建策略对象来完成

@Configuration
public class FeignRibbonConfig {
   
    @Bean
    public IRule randomRule(){
   
        return new RandomRule();
    }
}

2.2 ribbon的重试机制

Eureka的服务治理强调了CAP原则中的AP,即可用性和可靠性。是一种弱一致性的.加上eureka的失效剔除有一定的延时,客户端获取服务列表也有缓存。可能会导致的一个问题是,在一个服务的某个实例不能用了之后,ribbon调用到不能用的实例,导致调用出错,实际其他的实例是能用的。因此Spring Cloud 整合了Spring Retry 来增强RestTemplate的重试能力,当一次服务调用失败后,不会立即抛出一次,而是再次重试另一个服务。

只需要简单配置即可实现Ribbon的重试:

spring:
  cloud:
    loadbalancer:
      retry:
        enabled: true # 开启Spring Cloud的重试功能,默认就为true
user-service:
  ribbon:
    ConnectTimeout: 250 # Ribbon的连接超时时间
    ReadTimeout: 1000 # Ribbon的数据读取超时时间
    OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
    MaxAutoRetriesNextServer: 1 # 切换实例后的重试次数
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值