IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Spring Cloud】gateway详细介绍 -> 正文阅读

[Java知识库]【Spring Cloud】gateway详细介绍

gateway是什么?

该项目提供了一个库,用于在 Spring WebFlux 之上构建 API 网关。Spring Cloud Gateway 旨在提供一种简单而有效的方式来路由到 API,并为它们提供横切关注点,例如:安全性、监控/指标和弹性。

特点

  • 基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.0 构建。
  • 能够匹配任何请求属性的路由。
  • 谓词和过滤器特定于路由。
  • 断路器集成。
  • Spring Cloud Discovery客户端集成。
  • 易于编写谓词和过滤器。
  • 请求速率限制。
  • 路径重写。

词汇表

Route:网关的基本构建块。它由 ID、目标 URI、谓词集合和过滤器集合定义。如果聚合谓词为真,则匹配路由。

谓词:这是一个Java 8 函数谓词。输入类型是Spring FrameworkServerWebExchange。这使您可以匹配来自 HTTP 请求的任何内容,例如标头或参数。

过滤器GatewayFilter:这些是使用特定工厂构建的实例。在这里,您可以在发送下游请求之前或之后修改请求和响应。

gateway是如何工作的呢?

在这里插入图片描述

  1. Gateway 接收客户端请求。
  2. 请求与 Predicate 进行匹配,获得到对应的 Route。匹配成功后,才能继续往下执行。
  3. 请求经过 Filter 过滤器链,执行前置(prev)处理逻辑。例如说,修改请求头信息等。
  4. 请求被 Proxy Filter 转发至目标 URI,并最终获得响应。一般来说,目标 URI 是被代理的微服务,如果是在 Spring Cloud 架构中。
  5. 响应经过 Filter 过滤器链,执行后置(post)处理逻辑。
  6. Gateway 返回响应给客户端。

在这里插入图片描述

路由谓词工厂

after_route

before_route

between_route

cookie_route

header_route

host_route

method_route

path_route

spring:
  cloud:
    gateway:
      routes:
      - id: path_route
        uri: https://example.org
        predicates:
        - Path=/red/{segment},/blue/{segment}

query_route

remoteaddr_route

weight_high

GatewayFilter工厂

-AddRequestHeader

-AddRequestParameter

-AddResponseHeader

-DedupeResponseHeader

- Hystrix

- CircuitBreaker

- RewritePath

spring:
  cloud:
    gateway:
      routes:
      - id: rewritepath_route
        uri: https://example.org
        predicates:
        - Path=/red/**
        filters:
        - RewritePath=/red(?<segment>/?.*), $\{segment}

对于 的请求路径/red/blue,这会将路径设置为/blue在发出下游请求之前。请注意,由于 YAML 规范,$ 应将其替换为 $\。

FallbackHeaders

- MapRequestHeader

- PrefixPath=/mypath

/mypath这将作为所有匹配请求路径的前缀。因此,/hello将向 发送请求/mypath/hello

- PreserveHostHeader

- RedirectTo=302, https://acme.org

- RemoveRequestHeader=X-Request-Foo

这会在将X-Request-Foo标头发送到下游之前将其删除。

- RemoveResponseHeader=X-Response-Foo

这将X-Response-Foo在返回给网关客户端之前从响应中删除标头。

- RemoveRequestParameter=red

这将在将red参数发送到下游之前将其删除。

- RewritePath=/red(?/?.*), ${segment}

对于 的请求路径/red/blue,这会将路径设置为/blue在发出下游请求之前。请注意,由于 YAML 规范, 应 将 其 替 换 为 。 应将其替换为。 \

- RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,

- RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***

- SaveSession

- SetPath=/{segment}

对于 的请求路径/red/blue,这会将路径设置为/blue在发出下游请求之前。

- SetRequestHeader=foo, bar-{segment}

- SetResponseHeader=foo, bar-{segment}

- SetStatus=401

- StripPrefix=2

spring:
  cloud:
    gateway:
      routes:
      - id: nameRoot
        uri: https://nameservice
        predicates:
        - Path=/name/**
        filters:
        - StripPrefix=2

当通过网关向发出请求时/name/blue/red,向 发出的请求nameservice看起来像nameservice/red。

- name: RequestSize

      args:
        maxSize: 5000000

- name: SetRequestHostHeader

      args:
        host: example.org

针对于上面每个谓词及过滤器,大家可以针对官网进行学习了解。

个人实践

application.yml文件

server:
  port: 7001
spring:
  cloud:
    gateway:
      routes:  # 路由配置项,对应RouteDefinition数组
        - id: api_route  #路由的编号
          uri: lb://apis-service #路由到的目标地址
          predicates: #断言,谓词,作为路由的匹配条件,对应RouteDefinition数组
            - Path=/**
          filters: #过滤器,对请求进行拦截,实现自定义的功能,对应FilterDefinition数组
            - StripPrefix=0
        - id: oschina  #路由的编号
          uri: https://www.oschina.net #路由到的目标地址
          predicates: #断言,谓词,作为路由的匹配条件,对应RouteDefinition数组
            - Path=/oschina
          filters: #过滤器,对请求进行拦截,实现自定义的功能,对应FilterDefinition数组
            - StripPrefix=1

用配置文件中第二个 -id 进行举例说明,浏览器输入:http://localhost:7001/oschina,直接路由到 :https://www.oschina.net

注:① 如果配置多个 -id,这里有一点需要注意的,他们有一个执行顺序,从上至下执行,如果你的服务有先后顺序一定要注意。
② 配置文件中的路由 uri,可不要写成url。要不然导致项目起不来哦。

在这里插入代码片

在这里插入图片描述

总结

所学即所得,大家可以参考 官网 进行学习。
参考:芋道 Spring Cloud 网关 Spring Cloud Gateway 入门

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:16:56  更:2022-02-26 11:19:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:30:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码