首页 > 其他分享 >GetWay的上手使用

GetWay的上手使用

时间:2024-05-25 16:32:37浏览次数:21  
标签:网关 http Spring GetWay API 使用 Gateway 路由

目录

1. 什么是 API 网关(API Gateway)

API 网关的定义

API 网关的职能

​编辑API 网关的分类与功能

2. Gateway是什么

3. 为什么用Gateway

4. Gateway怎么用

通过 Cookie 匹配


1. 什么是 API 网关(API Gateway)


分布式服务架构、微服务架构与 API 网关

在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式。

API 网关的定义


网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。

API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。

API 网关的职能


API 网关的分类与功能

2. Gateway是什么

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

3. 为什么用Gateway


Spring Cloud Gateway 可以看做是一个 Zuul 1.x 的升级版和代替品,比 Zuul 2 更早的使用 Netty 实现异步 IO,从而实现了一个简单、比 Zuul 1.x 更高效的、与 Spring Cloud 紧密配合的 API 网关。
Spring Cloud Gateway 里明确的区分了 Router 和 Filter,并且一个很大的特点是内置了非常多的开箱即用功能,并且都可以通过 SpringBoot 配置或者手工编码链式调用来使用。
比如内置了 10 种 Router,使得我们可以直接配置一下就可以随心所欲的根据 Header、或者 Path、或者 Host、或者 Query 来做路由。
比如区分了一般的 Filter 和全局 Filter,内置了 20 种 Filter 和 9 种全局 Filter,也都可以直接用。当然自定义 Filter 也非常方便。

最重要的几个概念

4. Gateway怎么用


说白了 Predicate 就是为了实现一组匹配规则,方便让请求过来找到对应的 Route 进行处理,接下来我们接下 Spring Cloud GateWay 内置几种 Predicate 的使用。

通过时间匹配
Predicate 支持设置一个时间,在请求进行转发的时候,可以通过判断在这个时间之前或者之后进行转发。比如我们现在设置只有在 2019 年 1 月 1 日才会转发到我的网站,在这之前不进行转发,我就可以这样配置

spring:
  cloud:
    gateway:
      routes:
       - id: time_route
        uri: http://ityouknow.com
        predicates:
         - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]


Spring 是通过 ZonedDateTime 来对时间进行的对比,ZonedDateTime 是 Java 8 中日期时间功能里,用于表示带时区的日期与时间信息的类,ZonedDateTime 支持通过时区来设置时间,中国的时区是:Asia/Shanghai。

After Route Predicate 是指在这个时间之后的请求都转发到目标地址。上面的示例是指,请求时间在 2018 年 1 月 20 日 6 点 6 分 6 秒之后的所有请求都转发到地址http://ityouknow.com。+08:00是指时间和 UTC 时间相差八个小时,时间地区为Asia/Shanghai。

添加完路由规则之后,访问地址http://localhost:8080会自动转发到http://ityouknow.com。

Before Route Predicate 刚好相反,在某个时间之前的请求的请求都进行转发。我们把上面路由规则中的 After 改为 Before,如下:

spring:
  cloud:
    gateway:
      routes:
       - id: after_route
        uri: http://ityouknow.com
        predicates:
         - Before=2018-01-20T06:06:06+08:00[Asia/Shanghai]


就表示在这个时间之前可以进行路由,在这时间之后停止路由,修改完之后重启项目再次访问地址http://localhost:8080,页面会报 404 没有找到地址。

除过在时间之前或者之后外,Gateway 还支持限制路由请求在某一个时间段范围内,可以使用 Between Route Predicate 来实现。

spring:
  cloud:
    gateway:
      routes:
       - id: after_route
        uri: http://ityouknow.com
        predicates:
         - Between=2018-01-20T06:06:06+08:00[Asia/Shanghai], 2019-01-20T06:06:06+08:00[Asia/Shanghai]


这样设置就意味着在这个时间段内可以匹配到此路由,超过这个时间段范围则不会进行匹配。通过时间匹配路由的功能很酷,可以用在限时抢购的一些场景中。

通过 Cookie 匹配


Cookie Route Predicate 可以接收两个参数,一个是 Cookie name , 一个是正则表达式,路由规则会通过获取对应的 Cookie name 值和正则表达式去匹配,如果匹配上就会执行路由,如果没有匹配上则不执行。

spring:
  cloud:
    gateway:
      routes:
       - id: cookie_route
         uri: http://ityouknow.com
         predicates:
         - Cookie=ityouknow, kee.e


使用 curl 测试,命令行输入:

curl http://localhost:8080 --cookie "ityouknow=kee.e"


则会返回页面代码,如果去掉--cookie "ityouknow=kee.e",后台汇报 404 错误。

Header Route Predicate 和 Cookie Route Predicate 一样,也是接收 2 个参数,一个 header 中属性名称和一个正则表达式,这个属性值和正则表达式匹配则执行。

spring:
  cloud:
    gateway:
      routes:
      - id: header_route
        uri: http://ityouknow.com
        predicates:
        - Header=X-Request-Id, \d+


使用 curl 测试,命令行输入:

curl http://localhost:8080  -H "X-Request-Id:666666" 


则返回页面代码证明匹配成功。将参数-H "X-Request-Id:666666"改为-H "X-Request-Id:neo"再次执行时返回 404 证明没有匹配。

标签:网关,http,Spring,GetWay,API,使用,Gateway,路由
From: https://blog.csdn.net/m0_59679869/article/details/139199199

相关文章

  • SCSS 基本使用详解
    一、引言SCSS是Sass(SyntacticallyAwesomeStylesheets)的其中一种语法,是一种预处理器脚本语言,能够扩展CSS的功能,使其更加强大和高效。SCSS保留了CSS的原有语法,同时增加了变量、嵌套规则、混合宏(mixin)、继承等高级功能。本文将详细介绍SCSS的基本使用方法,帮助读者......
  • JDBC的简单使用以及介绍
    JDBC(JavaDataBaseConnectivity)Java语言连接数据库再本模块中,java提供里一组用于连接数据库的类和接口Java语言开发者,本身没有提供如何具体连接数据库的功能只是定义了一组java程序连接数据库的访问接口连接到数据库向数据库发送增,修改,删除这一类的sql发送查询s......
  • 在奖学金管理系统项目中使用 GitHub 管理源代码
    1.GitHub管理代码的基本步骤GitHub是一个基于Git的代码托管平台,提供了版本控制和协作开发的功能。以下是使用GitHub管理代码的基本步骤:注册和创建存储库:注册一个GitHub账号。创建一个新的存储库(Repository):登录GitHub,点击右上角的“+”号,选择“Newreposi......
  • 在excel中使用python 快速作图示例
    前言Excel中可以使用python算是一个旧闻了,是python之父GuidovanRossum加入微软的重要产品。刚出来的第一时间我也尝鲜了,最近作图的时候,再次使用了这个功能,感觉非常方便,推荐大家也用一下。优点:Python在云端运行,无需部署环境。可以编写脚本来自动化日常的Excel任务......
  • Gin与OpenAPI(Swagger)的使用
    一、背景1、swagger与openapi      Swagger:            一种用于描述RESTFULAPI的规范,它提供了一种简单的来描述API的请求和相应参数、错误码、返回数据类型等信息,是开发者可以方便了解API使用方式。     官网: https://swagger.io/  ......
  • uni.app使用教程
    一、介绍1、跨平台开发Uniapp可以实现一次编码,同时生成多个应用程序,包括iOS、Android、H5、小程序等。开发者只需要使用Vue.js框架进行开发,而不需要考虑不同平台的差异,大大降低了应用程序的开发难度和复杂度。2、统一的开发语言和工具Uniapp的开发语言是Vue.js,它是一种基于......
  • 使用网络爬虫爬取省市区县的经纬度
    我们从阿里云的数字可视化平台获取数据 http://datav.aliyun.com/tools/atlas爬取的链接如下:湖北省(不包含子区域):https://geo.datav.aliyun.com/areas_v3/bound/420000.json湖北地级市(包含子区域):https://geo.datav.aliyun.com/areas_v3/bound/420100_full.json(武汉市为例)湖北......
  • reactk中useCallback的使用场景
    useCallback 是React中的一个Hook,用于优化性能并避免不必要的函数重新创建。在React中,当一个组件重新渲染时,其内部的函数也会被重新创建。这可能会导致向子组件传递的回调函数发生变化,从而导致子组件不必要地重新渲染。为了避免这种情况,可以使用 useCallback 来创建记忆......
  • 【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植
    最终效果系列导航文章目录最终效果系列导航前言素材简单搭建环境豌豆射手向日葵源码结束前言在游戏界,有些作品以其独特的创意和精彩的游戏体验,成为了经典中的经典。而《植物大战僵尸》就是其中的佼佼者,它以其独特的塔防玩法和富有趣味性的设计,吸引了全球无数玩家......
  • Golang:使用go-resty/resty发送http请求get和post
    Golang:使用go-resty/resty发送http请求get和post原创 吃个大西瓜 CodingBigTree 2024-05-2508:00 北京 听全文 go-resty/resty是一个简单的HTTP和REST客户端,受到Rubyrest-client的启发文档https://github.com/go-resty/resty/安装go get github......