• Spring Cloud Alibaba Gateway 简单使用


    Spring Cloud Alibaba Gateway

    1.Gateway简介

    Spring Cloud Gateway是一个基于Spring Framework开发的反应式API网关,用于构建微服务架构中的网关服务。它提供了一种简单而有效的方式来路由、过滤和处理传入的请求,并与后端微服务进行交互。

    Spring Cloud Gateway具有以下特点和功能:

    • 路由:可以根据请求的路径、方法、头部等信息将请求路由到不同的目标服务上。

    • 过滤:支持使用各种预定义的或自定义的过滤器对请求和响应进行处理,例如认证、鉴权、日志记录等。

    • 负载均衡:支持集成服务发现机制,并可通过负载均衡算法将请求分发到多个实例中。

    • 断路器:集成了断路器模式,可以在后端服务出现故障或超时的情况下进行熔断和降级处理。

    • 集成性:与Spring生态系统紧密集成,可以与Spring Boot、Spring Cloud Config、Eureka等组件无缝协作。

    • 反应式支持:基于Reactor提供异步、非阻塞的处理机制,具有更高的性能和可扩展性。

    使用Spring Cloud Gateway可以有效地管理和组织微服务架构中的请求流量,提高系统的可伸缩性和可靠性。同时,它还提供了丰富的扩展点和配置选项,使开发人员能够根据自己的需求进行定制和扩展。

    2. 流量网关和服务网关的区别

    在这里插入图片描述

    • 流量网关:(如Nignx,OpenRest,Kong, Envoy)是指提供全局性的、与后端业务应用无关的策略,例如
      HTTPS证书认证、Web防火墙、全局流量监控,黑白名单等。
    • 服务网关:(如Spring Cloud
      Gateway)是指与业务紧耦合的、提供单个业务域级别的策略,如服务治理、身份认证等。也就是说,流量网关负责南北向流量调度及安全防护,微服务网关负责东西向流量调度及服务治理。

    3. Spring Cloud Gateway 网关的搭建

    3.1 Spring Cloud Gateway 配置项的说明

    在介绍 Spring Cloud Gateway 的配置项之前,我们先了解几个 Spring Cloud Gateway 的核心术语:
    路由(route):由ID、目标URI、断言集合和过滤器集合组成。如果聚合断言结果为真,则转发到该路由。
    断言(Predicate):参照 Java8 的新特性Predicate,允许开发人员匹配 HTTP 请求中的任何内容,比如请求头或请求参数或请求路径,最后根据匹配结果返回一个布尔值。
    过滤器(filter):可以在返回请求之前或之后修改请求和响应的内容。

    • 路由 Route:
      Route 主要由 路由id、目标uri、断言集合和过滤器集合组成,那我们简单看看这些属性到底有什么作用。
      (1)id:路由标识,要求唯一,名称任意(默认值 uuid,一般不用,需要自定义)
      (2)uri:请求最终被转发到的目标地址
      (3)order: 路由优先级,数字越小,优先级越高
      (4)predicates:断言数组,即判断条件,如果返回值是boolean,则转发请求到 uri 属性指定的服务中
      (5)filters:过滤器数组,在请求传递过程中,对请求做一些修改

    • 断言 Predicate:
      Predicate 来自于 Java8 的接口。Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。
      Predicate 可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。Spring Cloud Gateway 内置了许多 Predict,这些 Predict 的源码在 org.springframework.cloud.gateway.handler.predicate 包中。

    • 过滤器 filter:
      Gateway 过滤器的生命周期:
      PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
      POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
      Gateway 过滤器从作用范围可分为两种:
      局部过滤器: GatewayFilter:应用到单个路由或者一个分组的路由上(需要在配置文件中配置)
      全局过滤器: GlobalFilter:应用到所有的路由上(无需配置,全局生效)
      内置局部过滤器 GatewayFilter:
      局部过滤器需要在指定路由配置才能生效,默认是不生效的。“AddResponseHeaderGatewayFilterFactory” 这个过滤器为例,为原始响应添加Header,配置如下

    spring.cloud.gateway.routes[0].id=router1
    spring.cloud.gateway.routes[0].uri=http://localhost:9024
    spring.cloud.gateway.routes[0].predicates[0]=Path=/a/**
    spring.cloud.gateway.routes[0].filters[0]=AddResponseHeader=Foo, Bar
    #StripPrefix参数表示在将请求发送到下游之前从请求中剥离的路径个数。
    spring.cloud.gateway.routes[0].filters[1]=StripPrefix=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.2 依赖导入

    这里需要指定版本 spring boot的版本是2.3.11RELEASE

    父模块

    <parent>
            <groupId>com.hb</groupId>
            <artifactId>spring-cloud-root</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <relativePath>../pom.xml</relativePath>
        </parent>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-webflux</artifactId>
     </dependency>
     <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-gateway</artifactId>
          <version>2.2.2.RELEASE</version>
    
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    使用新的web依赖
    在这里插入图片描述
    导入依赖时发现
    在这里插入图片描述

    3.3 配置文件

    # 配置路由
    spring.cloud.gateway.routes[0].id = test
    #这是显示请求详情的网址,同时也是本次被路由到的url
    spring.cloud.gateway.routes[0].uri = http://httpbin.org
    #配置断言 也就是本次可以被路由出的地址必须在test域名下
    spring.cloud.gateway.routes[0].predicates[0] = Path=/test/**
    # 配置截取二级目录 也就是  截取 http://httpbin.org/test/** 截取成为 http://httpbin.org/**
    spring.cloud.gateway.routes[0].filters[0] = StripPrefix=1
    #添加过滤请求时  请求头中添加一个参数
    spring.cloud.gateway.routes[0].filters[1] = AddRequestParameter=aa,blue
    #请求头中添加参数
    spring.cloud.gateway.routes[0].filters[2] = AddRequestHeader=lianxu,shuai
    #添加一个返回头
    spring.cloud.gateway.routes[0].filters[3] = AddResponseHeader=kuailong,shuaidaile
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    响应结果

    在这里插入图片描述
    响应头
    在这里插入图片描述

  • 相关阅读:
    Zookeeper脑裂解决方案
    (附源码)php初中历史专题教学网站 毕业设计 100623
    太强了,用Excel玩机器学习
    我的创作纪念日
    Go 之常用并发学习
    HTTP静态文件服务器gohttpserver
    利用styleSheet,避免js手动频繁修改样式
    【集装箱调度】基于粒子群算法实现考虑重量限制和时间约束的集装箱码头满载AGV自动化调度附matlab代码
    一种模型压缩技术
    Ps:移动工具
  • 原文地址:https://blog.csdn.net/weixin_63558979/article/details/133162244