微服务 - Feign、Hystrix、Ribbon、Zuul

Feign

支持注解使用,默认用Java编写的HTTP Client绑定器,也可以支持其他HttpClient工具包,例如OkHttp及Apache HttpClient,针对Apache HttpClient的典型配置如下


feign:
  #替换掉JDK默认HttpURLConnection实现的 Http Client
  httpclient:
    enabled: true
  hystrix:
    enabled: true
  client:
    config:
      default:
       #连接超时时间
        connectTimeout: 5000
       #读取超时时间
        readTimeout: 5000

hystrix

包含了服务降级、服务熔断、线程隔离、请求缓存、请求合并以及服务监控等功能,非必选

hystrix:
  propagate:
    request-attribute:
      enabled: true
  command:
    #全局默认配置
    default:
      #线程隔离相关
      execution:
        timeout:
          #是否给方法执行设置超时时间,默认为true。一般我们不要改。
          enabled: true
        isolation:
          #配置请求隔离的方式,这里是默认的线程池方式。还有一种信号量的方式semaphore,使用比较少。
          strategy: threadPool
          thread:
            #方式执行的超时时间,默认为1000毫秒,在实际场景中需要根据情况设置
            timeoutInMilliseconds: 10000
            #发生超时时是否中断方法的执行,默认值为true。不要改。
            interruptOnTimeout: true
            #是否在方法执行被取消时中断方法,默认值为false。没有实际意义,默认就好!
            interruptOnCancel: false
  circuitBreaker:   #熔断器相关配置
    enabled: true   #是否启动熔断器,默认为truefalse表示不要引入Hystrix。
    requestVolumeThreshold: 20     #启用熔断器功能窗口时间内的最小请求数,假设我们设置的窗口时间为10秒,
    sleepWindowInMilliseconds: 5000    #所以此配置的作用是指定熔断器打开后多长时间内允许一次请求尝试执行,官方默认配置为5秒。
    errorThresholdPercentage: 50   #窗口时间内超过50%的请求失败后就会打开熔断器将后续请求快速失败掉,默认配置为50

Ribbon

主要功能包括客户端负载均衡器及用于中间层通信的客户端。在基于Feign的微服务通信中无论是否开启Hystrix,Ribbon都是必不可少的,Ribbon的配置参数主要如下:

ribbon:
  eager-load:
    enabled: true
  #说明:同一台实例的最大自动重试次数,默认为1次,不包括首次
  MaxAutoRetries: 1
  #说明:要重试的下一个实例的最大数量,默认为1,不包括第一次被调用的实例
  MaxAutoRetriesNextServer: 1
  #说明:是否所有的操作都重试,默认为true
  OkToRetryOnAllOperations: true
  #说明:从注册中心刷新服务器列表信息的时间间隔,默认为2000毫秒,即2秒
  ServerListRefreshInterval: 2000
  #说明:使用Apache HttpClient连接超时时间,单位为毫秒
  ConnectTimeout: 3000
  #说明:使用Apache HttpClient读取的超时时间,单位为毫秒
  ReadTimeout: 3000

前三者关系图

在这里插入图片描述

如果微服务项目加上了spring-cloud-starter-netflix-hystrix依赖,那么,feign会通过代理模式, 自动将所有的方法用 hystrix 进行包装。

过程如下:

  1. 通过Feign进行声明式调用
  2. hystrix 将方法进行包装,请求被hystrix管控
  3. Ribbon从注册中心获取目标微服务的服务器地址列表
  4. Ribbon 作为SLB根据负载均衡规则计算出调用方
  5. Feign HttpClient进行调用

Zuul

工作原理

zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。

在这里插入图片描述
zuul的核心在于filters, 这些filter会在不同阶段对Request Context进行操作,以达到网关的作用。

生命周期

在这里插入图片描述

类型

  • pre:主要是在请求路由之前调用,很多验证可以在这里做
  • route:在路由请求时候被调用,主要用来转发请求
  • post:主要用来处理响应请求
  • error:当错误发生时,会经由这个类型的过滤器处理

内置列表如下,oder越小越先执行

过滤器order描述类型
ServletDetectionFilter-3检测请求是用 DispatcherServlet还是 ZuulServletpre
Servlet30WrapperFilter-2在Servlet 3.0 下,包装 requests prepre
FormBodyWrapperFilter-1解析表单数据pre
DebugFilter-1设置请求过程是否开启debugpre
SendErrorFilter0如果中途出现错误的过滤pre
PreDecorationFilter5根据uri决定调用哪一个route过滤器pre
RibbonRoutingFilter10如果写配置的时候用ServiceId则用这个route过滤器,该过滤器可以用Ribbon 做负载均衡,用hystrix做熔断route
SimpleHostRoutingFilter100如果写配置的时候用url则用这个route过滤route
SendForwardFilter500用RequestDispatcher请求转发route
SendResponseFilter1000用RequestDispatcher请求转发Post
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值