Spring Cloud Alibaba Gateway 简单使用

news2024/11/18 17:21:38

文章目录

  • Spring Cloud Alibaba Gateway
    • 1.Gateway简介
    • 2. 流量网关和服务网关的区别
    • 3. Spring Cloud Gateway 网关的搭建
      • 3.1 Spring Cloud Gateway 配置项的说明
      • 3.2 依赖导入
      • 3.3 配置文件

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

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>
 <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>

使用新的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

响应结果

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图片分割处理(以玉米颗粒的图片分割为例)

问题&#xff1a; 为完成玉米颗粒分类任务&#xff0c;现需要处理训练图片&#xff0c;将以下图片中的玉米颗粒进行分割&#xff1a; 目标&#xff1a; 操作步骤&#xff08;完整代码附在最后&#xff0c;该部分为解释说明&#xff09; 一、提取通道并进行二值化 # 提取蓝…

CCC数字钥匙设计【BLE】 --建立安全测距

1、建立安全测距Establish Secure Ranging 车端总共有三种建立安全测距的方式&#xff0c;具体如下&#xff1a; 1) Optimal Flow 2) Sub-Optimal Flow 3) Ranging Recovery Flow 为了确定建立安全测距需要执行哪条流程&#xff0c;车辆需要进行以下流程选择。当车辆和设备…

速码!!BGP最全学习笔记:BGP路径属性与选路原则

BGP路径属性 1、路径属性分类 公认属性&#xff1a;所有BGP路由器都必须能够识别的属性 公认必遵&#xff08;Well-known Mandatory&#xff09;&#xff1a;必须包括在每个Update消息里。公认任意&#xff08;Well-known Discretionary&#xff09;&#xff1a;可能包括在某…

数学公式测试

MVP变换 MVP变换用来描述视图变换的任务&#xff0c;即将虚拟世界中的三维物体映射&#xff08;变换&#xff09;到二维坐标中。 MVP变换分为三步&#xff1a; 模型变换(model tranformation)&#xff1a;将模型空间转换到世界空间&#xff08;找个好的地方&#xff0c;把所…

4年北漂之路,从软件测试外包到外企的一点小心得

4年前&#xff0c;我独自一人拖着行李箱来到了北京&#xff0c;成为了一名北漂&#xff0c;离开了校园的庇护&#xff0c;只身一人想要在这片陌生的地方闯出一番名堂&#xff0c;可最后却不得人意&#xff0c;面临着和所有北漂群体的共同困局&#xff0c;没有任何归属感&#x…

【Python Fastapi】js上传文件,fastapi处理,js显示回传信息

python from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from typing import List import requestsapp FastAPI()# 配置静态文件目录 app.mount("/static"…

C++程序员,想入坑音视频方向,需要掌握那些技能树?

C程序员&#xff0c;想入坑音视频方向&#xff0c;需要掌握那些技能树? “音视频”方向太笼统了。 最核心的技术包括编码理论&#xff0c;从基础开始就是信号处理&#xff0c;傅里叶变换&#xff0c;DCT, 采样量化插值等等。这些和C没啥关系&#xff0c;就是一套数学理论。 …

工作薄代码之将活动工作表复制到新工作簿等

【分享成果&#xff0c;随喜正能量】得失&#xff0c;可以说是人类事业上的考验&#xff0c;不要因一时的得失影响一生的期许。得失是一时的&#xff0c;理想是一生的。。 我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xf…

基于SpringBoot的企业客户管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能模块 员工功能模块 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c…

JVM堆内存转储

堆转储是 JVM 中特定时刻内存中的所有对象的快照。它们对于解决内存泄漏问题并优化 Java 应用程序中的内存使用情况非常有用。 堆转储通常以二进制格式 hprof 文件存储。我们可以使用 jhat 或 JVisualVM 等工具打开和分析这些文件。 下面介绍两种堆转储的方式&#xff1a; 1…

HTTP 请求轻松搞定:Swift 网络编程的不二之选 | 开源日报 No.38

Alamofire/Alamofire Stars: 39.8k License: MIT Alamofire 是一个用 Swift 编写的 HTTP 网络库。 简洁的语法和强大的功能集&#xff0c;让你仅需几行代码就能实现诸如自动重试等强大特性。支持链式请求/响应方法&#xff0c;使得处理网络请求变得如丝般顺滑。完美兼容 Swif…

前端性能测试工具-lighthouse

Lighthouse简介 Lighthouse 是 Google 的一款开源工具&#xff0c;它可以作为一个 Chrome 扩展程序运行&#xff0c;或从命令行运行。只需要给 Lighthouse 提供一个要审查的网址&#xff0c;它将针对此页面运行一连串的测试&#xff0c;然后生成一个页面性能的报告。 Lightho…

【电子通识】办法总比问题多:立式贴片座子整形成卧式

最近在测试一些和电池有关的项目&#xff0c;因为这个电池接口是没有用过的&#xff0c;以前做的一些接口板上没有兼容&#xff0c;导致不方便测试。 拿到座子后发现这个座子是立式贴片的。 但是不方便我做测试接口板工装&#xff0c;因为已经有一个立工座子了&#xff0c;再焊…

多个pdf合并成一个文件,3个方法合并pdf

如何把多个pdf合并成一个文件&#xff1f;在我们日常的工作中&#xff0c;经常会遇到一些需要处理的文件&#xff0c;其中包括PDF文件。特别是当我们需要将多个PDF文件合并成一个PDF文件时&#xff0c;会面临一些困难。这样的情况下&#xff0c;我们的阅读能力会受到限制&#…

ElementUI之首页导航+左侧菜单

一.Mockjs 什么是Mock.js Mock.js的优缺点 安装配置Mock.js 引入jsdev.env.js ​编辑 引入 prod.env.js 导依赖 导入json数据 造数据 测试结果 ​编辑 二. 总线 什么是总线 导入组件 编写路由 跳转主页 编写AppMain 编写LeftNav 编写TopNav 一.Mockjs 什么是Moc…

车载通信架构 —— SOME/IP-SD 协议介绍

车载通信架构 —— SOME/IP-SD 协议介绍 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗…

Xilinx FPGA 7系列 GTX/GTH Transceivers (3) Aurora 8b10b

第一节:Xilinx FPGA 7系列 GTX/GTH Transceivers (1)–了解了GTX硬件的基础知识 第二节:IBERT GTX --通过Ibert IP测试链路通信 学习官方历程 aurora 8b10b single lane 4byte 1硬件介绍 2 实验目标 跑通官方历程。检测发送数据与接收收据一致。 3 IP 生成过程 在 IP Cat…

Xcode14.3.1打包报错Command PhaseScriptExecution failed with a nonzero exit code

真机运行编译正常,一打包就报错 rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/d9889869-120b-11ee-b796-7a03568b17ac/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender2.6.9] Command PhaseScrip…

@NotNull注解不生效,全局异常处理

1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>3.1.2</version> </dependency> 2&#xff1a;实体类 实体类属性加上NotNull注解…

第二章 使用matplotlib绘制简单图表

第二章 使用matplotlib绘制简单图表 1.绘制折线图 1.1.使用plot()绘制折线图 ​ 使用pyplot的plot()函数可以快速绘制折线图。plot()函数的语法格式如下&#xff1a; plot&#xff08;x, y, fmt, scalexTrue, scaleyTrue, dataNone, labelNone, *args, **kwargs&#xff09…