SpringCloud之Gateway

本文介绍了Spring Cloud Gateway,它是Spring Cloud的一个全新项目,作为微服务的统一入口,提供路由管理、过滤器等功能。详细讲解了路由配置、断言条件、过滤器(包括全局和局部过滤器)以及高级特性如熔断降级和跨域配置。
摘要由CSDN通过智能技术生成

一、服务网关简介

1、什么是服务网关?

        简单理解服务网关就是一个网络关口、通道,是整个服务的统一入口;所有客户端的请求都通过统一的网关接入服务。

2、服务网关的作用

        为微服务云平台提供统一的入口是API网关最主要的用途,除此之外,网关还可承担认证授权、访问控制、路由、负载均衡、缓存、日志、限流限额、转换、映射、过滤、熔断、注册、服务编排、API管理、监控、统计分析等等非业务性的功能。

二、Spring Cloud Gateway

1、简介

        SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
        SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 2.0之前的非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。
        Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。
        注意:Spring Cloud Gateway 底层使用了高性能的通信框架Netty。

2、三大核心概念

Filter(过滤器):
       和Zuul的过滤器在概念上类似,可以使用它拦截和修改请求,并且对下游的响应,进行二次处理。过滤器为org.springframework.cloud.gateway.filter.GatewayFilter类的实例。

Route(路由):
       网关配置的基本组成模块,和Zuul的路由配置模块类似。一个Route模块由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配,目标URI会被访问。

Predicate(断言):
       这是一个 Java 8 的 Predicate,可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。断言的输入类型是一个 ServerWebExchange。

三、Gateway之路由

1,基础路由配置方式

server:
  port: 9002
spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      routes:
        - id: service1
          uri: http://127.0.0.1:9001
          predicates:
            - Path=/api/bill
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9004/eureka

各字段含义如下:
● id:我们自定义的路由 ID,保持唯一
● uri:目标服务地址
● predicates:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。

       上面这段配置的意思是,配置了一个id为service1的URI代理规则,路由的规则为,当访问地址http://localhost:9002/api/bill时,会路由到上游地址http://127.0.0.1:9001/api/bill

2,基于代码的路由配置方式

       转发功能同样可以通过代码来实现,我们可以在启动类 GateWayApplication 中添加方法 customRouteLocator() 来定制转发规则:
在这里插入图片描述

3,和服务注册中心相结合的路由配置方式

server:
  port: 9002
spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      routes:
        - id: service1
          uri: http://127.0.0.1:9001
          predicates:
            - Path=/api/bill
        - id: service2
            uri: lb://cloud-payment-service
            predicates:
              - Path=/payment/id
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9004/eureka

       其中,id为service2的路由,通过loadbalancer负载均衡的方法对注册的服务进行路由(调用)

四、Gateway之断言条件

1、简介

       Predicate 来源于 Java 8,是 Java 8 中引入的一个函数,Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。
       在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性实现了各种路由匹配规则,有通过 Header、请求参数等不同的条件来进行作为条件匹配到对应的路由。

2、常见predicate的使用

        Spring Cloud GateWay 内置的几种Predicate如下:转发规则(predicates),假设转发uri都设定为http://localhost:9001
在这里插入图片描述

五、Gateway之过滤器

        Spring-Cloud-Gateway 基于过滤器实现,同 zuul 类似,有pre和post两种方式的 filter,分别处理前置逻辑和后置逻辑。客户端的请求先经过pre类型的 filter,然后将请求转发到具体的业务服务,收到业务服务的响应之后,再经过post类型的 filter 处理,最后返回响应到客户端。
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我待Java如初恋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值