springcloud之Ribbon,Feign,Hystrix,Gateway介绍

Posted 一只猪的思考

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springcloud之Ribbon,Feign,Hystrix,Gateway介绍相关的知识,希望对你有一定的参考价值。

一、Ribbon

1.Ribbon概述

  • Ribbon是 Netflix 提供的一个基于HTTP和TCP的客户端负载均衡工具。
  • Ribbon主要有两个功能:
    1. 简化远程调用
    2. 负载均衡
  • 服务端负载均衡
    • 负载均衡算法在服务端
    • 由负载均衡器维护服务地址列表
  • 客户端负载均衡
    • 负载均衡算法在客户端
    • 客户端维护服务地址列表

2.Ribbon远程调用

Ribbon 可以与 简化 RestTemplate 的远程调用

3. Ribbon 负载均衡

Ribbon 负责均衡策略:

  • 随机 :RandomRule
  • 轮询 :RoundRobinRule
  • 最小并发:BestAvailableRule
  • 过滤:AvailabilityFilteringRule
  • 响应时间:WeightedResponseTimeRule
  • 轮询重试:RetryRule
  • 性能可用性:ZoneAvoidanceRule
    同时定义rule方法

    设置负载均衡策略
    1. 编码
    2. 配置
  • user-service: # 生产者服务名称 ribbon:
  • NFloadBalancerRuleClassName: XxxRule # 负载均衡策略类

二、 Feign 声明式服务调用

1.feign概述

  • Feign 是一个声明式的REST 客户端,它用了基于接口注解方式,很方便实现客户端配置。
  • Feign 最初由 Netflix 公司提供,但不支持SpringMVC注解,后由 SpringCloud 对其封装,支持了SpringMVC注解,让使用者更易于接受

2.feign快速入门

  1. 在消费端引入 open-feign 依赖
<!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
  1. 编写Feign调用接口

  1. 在启动类 添加 @EnableFeignClients 注解,开启Feign功能

  1. 测试调用

3.feign其他功能

  1. Feign 其他功能 – 超时设置
  • Feign 底层依赖于 Ribbon 实现负载均衡和远程调用。
  • Ribbon默认1秒超时。
  • 超时配置:
  1. Feign 其他功能 – 日志记录

三、 Hystrix 熔断器

1.Hystrix概述

  • Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败(雪崩)。
  • 雪崩:一个服务失败,导致整条链路的服务都失败的情形。
  • Hystix 主要功能
  • 隔离
    1. 线程池隔离
    1. 信号量隔离
  • 降级
  • 熔断
  • 限流

2.Hystrix降级

  • Hystix 降级:当服务发生异常或调用超时,返回默认数据

Hystrix 降级 – 服务提供方

  1. 在服务提供方,引入 hystrix 依赖
 <!-- hystrix -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
         </dependency>
  1. 定义降级方法

  2. 使用 @HystrixCommand 注解配置降级方法

  3. 在启动类上开启Hystrix功能:@EnableCircuitBreaker

Hystrix 降级 – 服务消费方
5. feign 组件已经集成了 hystrix 组件。
6. 定义feign 调用接口实现类,复写方法,即 降级方法

  1. 在 @FeignClient 注解中使用 fallback 属性设置降级处理类。

  2. 配置开启 feign.hystrix.enabled = true

3.Hystrix熔断

Hystrix 熔断机制,用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败20次),会打开断路器,拒绝所有请求,直到服务恢复正常为止。

4.Hystrix熔断监控


Hystrix-dashboard
yml配置

开启dashboard

turbine
详细配置看这篇博客
Turbine聚合监控

四、Gateway 网关

1.网关概述

  • 网关旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。
  • 在微服务架构中,不同的微服务可以有不同的网络地址,各个微服务之间通过互相调用完成用户请求,客户端可能通过调用N个微服务的接口完成一个用户请求。
    • 存在的问题:
      • 客户端多次请求不同的微服务,增加客户端的复杂性
      • 认证复杂,每个服务都要进行认证
      • http请求不同服务次数增加,性能不高
  • 网关就是系统的入口,封装了应用程序的内部结构,为客户端提
    供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,
    诸如认证、鉴权、监控、缓存、负载均衡、流量管控、路由转发等
  • 在目前的网关解决方案里,有nginx+ Lua、Netflix Zuul 、Spring Cloud Gateway等等

2.Gateway 网关快速入门

  1. 搭建网关模块
    application.yml配置:
server:
  port: 80

spring:
  application:
    name: api-gateway-server

  cloud:
    # 网关配置
    gateway:
      # 路由配置:转发规则
      routes: #集合。
      # id: 唯一标识。默认是一个UUID
      # uri: 转发路径
      # predicates: 条件,用于请求网关路径的匹配规则
      # filters:配置局部过滤器的

      - id: gateway-provider
        # 静态路由
        # uri: http://localhost:8001/
        # 动态路由
        uri: lb://GATEWAY-PROVIDER
        predicates:
        - Path=/goods/**
        filters:
        - AddRequestParameter=username,zhangsan

      - id: gateway-consumer
        # uri: http://localhost:9000
        uri: lb://GATEWAY-CONSUMER
        predicates:
        - Path=/order/**
        # 微服务名称配置
      discovery:
        locator:
          enabled: true # 设置为true 请求路径前可以添加微服务名称
          lower-case-service-id: true # 允许为小写





eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  1. 引入依赖:starter-gateway
   <dependencies>
        <!--引入gateway 网关-->

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!-- eureka-client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
  1. 编写启动类

  2. 编写配置文件

  3. 启动测试

3.Gateway 过滤器


Gateway 过滤器 – 局部过滤器

Gateway 过滤器 – 全局过滤器


gateway详细配置
Spring Cloud Gateway 内置的过滤器工厂

以上是关于springcloud之Ribbon,Feign,Hystrix,Gateway介绍的主要内容,如果未能解决你的问题,请参考以下文章

springcloud之负载均衡

springcloud之Ribbon,Feign,Hystrix,Gateway介绍

springcloud之服务消费者(ribbon)

SpringCloud 之Feign服务消费者

SpringCloud之Ribbon

SpringCloud系列之三---Ribbon负载均衡使用