Spring Boot 中的 Spring Cloud Gateway

news2024/11/20 4:17:11

Spring Boot 中的 Spring Cloud Gateway

Spring Cloud Gateway 是一个基于 Spring Boot 的网关框架,它提供了一种统一的入口,将所有的请求路由到不同的后端服务中。Spring Cloud Gateway 采用了 Reactive 编程模型,可以处理大量并发请求,同时还具备负载均衡、熔断、限流等功能。本文将介绍 Spring Cloud Gateway 的原理和使用方法。

在这里插入图片描述

Spring Cloud Gateway 的原理

Spring Cloud Gateway 的原理是通过路由规则将请求转发到不同的后端服务中。在 Spring Cloud Gateway 中,路由规则是通过一个名为 RouteLocator 的 Bean 来定义的。RouteLocator 定义了一组路由规则,每个路由规则包含了一个请求路径和一个目标服务的地址。

当一个请求进入 Spring Cloud Gateway 时,它会根据路由规则将请求转发到对应的目标服务中。在转发请求时,Spring Cloud Gateway 还可以进行一些额外的处理,比如负载均衡、熔断、限流等。

如何使用 Spring Cloud Gateway

要使用 Spring Cloud Gateway,我们需要进行以下几个步骤:

  1. 引入 Spring Cloud 的依赖

我们需要在项目的 pom.xml 文件中引入 Spring Cloud 的依赖。具体来说,我们需要引入以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
  1. 配置路由规则

我们需要在 application.yml 或 application.properties 文件中配置路由规则,如下所示:

server:
  port: 8080

spring:
  cloud:
    gateway:
      routes:
        - id: demo-service
          uri: http://localhost:9000
          predicates:
            - Path=/demo/**

在这个配置中,我们定义了一个名为 demo-service 的路由规则,它将所有以 /demo 开头的请求转发到地址为 http://localhost:9000 的服务中。

  1. 运行 Spring Boot 应用程序

当我们完成以上配置后,我们就可以启动 Spring Boot 应用程序了。当应用程序启动后,它会自动监听 8080 端口,并根据路由规则将请求转发到对应的目标服务中。

路由规则

在 Spring Cloud Gateway 中,路由规则是通过一个名为 RouteLocator 的 Bean 来定义的。RouteLocator 定义了一组路由规则,每个路由规则包含了一个请求路径和一个目标服务的地址。路由规则可以通过以下方式定义:

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
            .route("demo-service", r -> r.path("/demo/**").uri("http://localhost:9000"))
            .build();
    }
}

在这个配置中,我们通过一个名为 customRouteLocator 的 Bean 定义了一个名为 demo-service 的路由规则,它将所有以 /demo 开头的请求转发到地址为 http://localhost:9000 的服务中。

过滤器

在 Spring Cloud Gateway 中,过滤器是一种用于在请求到达目标服务之前或之后执行一些操作的组件。过滤器可以用于请求过滤、响应过滤、请求转换等操作。Spring Cloud Gateway 中内置了许多过滤器,我们也可以根据自己的需求自定义过滤器。

在 Spring Cloud Gateway 中,过滤器是通过一个名为 GatewayFilter 的 Bean 来定义的。GatewayFilter 定义了一个过滤器,它可以在请求到达目标服务之前或之后执行一些操作。过滤器可以通过以下方式定义:

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
            .route("demo-service", r -> r.path("/demo/**").filters(f -> f.addRequestHeader("X-Request-Foo", "Bar")).uri("http://localhost:9000"))
            .build();
    }
}

在这个配置中,我们通过 addRequestHeader 方法添加了一个名为 X-Request-Foo,值为 Bar 的请求头。这个过滤器将在请求到达目标服务之前执行。

示例代码

下面是一个简单的示例代码,展示了如何使用 Spring Cloud Gateway 将请求转发到后端服务:

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
            .route("demo-service", r -> r.path("/demo/**").uri("http://localhost:9000"))
            .build();
    }
}

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

在这个示例中,我们创建了一个名为 GatewayApplication 的 Spring Boot 应用程序,并将它注册到 Eureka 注册中心中。我们在 GatewayConfig 类中定义了一个名为 customRouteLocator 的 Bean,它包含了一个名为 demo-service 的路由规则,将所有以 /demo 开头的请求转发到地址为 http://localhost:9000 的服务中。同时,我们在启动类上添加了 @EnableDiscoveryClient 注解,以便将应用程序注册到 Eureka 注册中心中。

结论

Spring Cloud Gateway 是一个基于 Spring Boot 的网关框架,它提供了一种统一的入口,将所有的请求路由到不同的后端服务中。Spring Cloud Gateway 采用了 Reactive 编程模型,可以处理大量并发请求,同时还具备负载均衡、熔断、限流等功能。在实际项目中,使用 Spring Cloud Gateway 可以使我们的微服务架构更加灵活和可靠。

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

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

相关文章

idea闪退,端口占用处理

1、idea --> Terminal 2、 输入命令 jps 查看进程 3、找到对应的进程&#xff0c;使用 taskkill /pid 端口号 /f 4、 重启项目 &#xff0c;即可

Golang快速鸟瞰

文章目录 引子知识图谱包代理设置关键字数据类型变量struct 和 interface控制语句字符串单引号、双引号、反引号数组与切片字典make和newjson与yaml基本语法指针Channeldeferinit函数类error, panic, recoverchannel与协程调试热加载Gin的热加载Iris的热加载 常用Golang框架常用…

数据库基础作业(linux系统)

数据库作业 在linux系统下的MySQL 创建数据库 使用数据库 查询当前默认的数据库以及使用的编码方式校验规则 查询创建数据的语句 删除数据库 创建数据表 定义多个字段,用上所有数据类型 mysql> SHOW CREATE TABLE multi_tb; -----------------------------------------…

重新理解z-index

一&#xff0c;前言 今天遇到一个布局兼容问题&#xff0c;调试了一番&#xff0c;发现z-index的表现和自己的认知不相符&#xff0c;才知道自己对z-index的认知有错误&#xff0c;于是写篇文章总结下这个z-index的具体使用。有基础的朋友可以直接看第四节。 二&#xff0c;标…

Android 内存治理之线程

1、 前言 当我们在应用程序中启动一个线程的时候&#xff0c;也是有可能发生OOM错误的。当我们看到以下log的时候&#xff0c;就说明系统分配线程栈失败了。 java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Out of memory这种情况可能是两种原因导致的。…

行业追踪,2023-07-06,市场反馈平平

自动复盘 2023-07-06 成交额超过 100 亿 排名靠前&#xff0c;macd柱由绿转红 成交量要大于均线 有必要给每个行业加一个上级的归类&#xff0c;这样更能体现主流方向 rps 有时候比较滞后&#xff0c;但不少是欲杨先抑&#xff0c; 应该持续跟踪&#xff0c;等 macd 反转时参与…

rust 从转移说起

Rust 专门提出了所有权和转移的概念&#xff0c;第一次接触总感觉晦涩&#xff0c;不属于正常思维&#xff0c;但还是得耐下性子&#xff0c;观摩观摩 Rust 所谓的转移。 Rust 中&#xff0c;对大多数类型而言&#xff0c;给变量赋值、给函数传值或者从函数返回值&#xff0c;…

Eclipse显示层级目录结构(像IDEA一样)

有的小伙伴使用IDEA习惯了&#xff0c;可能进入公司里面要求使用eclipse&#xff0c;但是eclipse默认目录是并列显示&#xff0c;而不是层级显示。部分人用起来感觉十分不方便。我们可以更改一下设置。 1、打开eclipse&#xff0c;找到这里 2、选择PackagePresentation 3、选…

支持跨语言、人声狗吠互换,仅利用最近邻的简单语音转换模型有多神奇

AI 语音转换真的越复杂越好吗&#xff1f;本文就提出了一个方法简单但同样强大的语言转换模型&#xff0c;与基线方法相比自然度和清晰度毫不逊色&#xff0c;相似度更是大大提升。 AI 参与的语音世界真神奇&#xff0c;既可以将一个人的语音换成任何其他人的语音&#xff0c;…

express框架中间件

1.介绍 说明&#xff1a;Express框架中间件是指在处理HTTP请求前或后对请求和响应进行处理的函数。具体而言&#xff0c;中间件可以&#xff1a; 执行一些公共的逻辑&#xff0c;比如身份验证、日志记录、错误处理等。修改请求和响应&#xff0c;比如缓存、压缩等。控制请求流…

ModaHub魔搭社区:基于 Amazon EKS 搭建开源向量数据库 Milvus

目录 01 前言 02 架构说明 03 先决条件 04 创建 EKS 集群 05 部署 Milvus 数据库 06 优化 Milvus 配置 07 测试 Milvus 集群 08 总结 01 前言 生成式 AI&#xff08;Generative AI&#xff09;的火爆引发了广泛的关注&#xff0c;也彻底点燃了向量数据库&…

Ubuntu中删除LibreOffice方法

目录 删除LibreOffice套件 删除所有与LibreOffice相关的软件包 删除与LibreOffice相关的配置文件 删除LibreOffice套件 1、打开终端。您可以使用快捷键Ctrl Alt T来打开终端。 2、输入以下命令以卸载LibreOffice套件&#xff1a; sudo apt-get remove libreoffice* 删…

[管理与领导-7]:新任管理第1课:管理转身--从技术业务走向管理 - 管理常识1

目录 第1章 管理基本概念 1.1 什么是管理&#xff1f; 1.2 管理的要素与职能 第2章 管理是什么&#xff1f; 2.1 以终为始 2.2 资源的优化配置 2.3 分而治之&#xff1a;分目标、分任务、分权力、分利益 2.4 目标明确 2.5 优先级 2.6 知人善用&#xff0c;人尽其才 …

【零基础入门学习Python---Python与其他技术的整合之快速入门实践】

&#x1f680; 零基础入门学习Python&#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜…

2023和鲸夏令营创作活动【黄金价格分析预测】

2023和鲸夏令营创作活动【黄金价格分析预测】 文章目录 2023和鲸夏令营创作活动【黄金价格分析预测】一、项目背景二、数据说明三、数据预处理四、数据探索性分析五、构建LSTM模型预测1、构建LSTM模型2、绘制loss的变化曲线3、进行预测 一、项目背景 本项目的目标是分析并预测…

SpringBoot——在测试阶段验证Web表现层的接口是否正常

验证请求状态 之前我们实现了在测试环境中开启Web环境&#xff0c;并且在测试阶段发送虚拟请求&#xff0c;并看到了返回的结果&#xff0c;这次我们不止要看他的请求结果&#xff0c;还要看他的请求过程和请求状态 匹配请求状态 首先就是查看请求的状态。主要介绍的就是一个…

基于 Arduino 库实现 ESP32 使能 WiFi AP + TCP Server 的应用

实现步骤&#xff1a; ESP32 开启 WiFi AP 模式创建 WiFi 热点定义 IP 地址创建 TCP Server 测试代码如下&#xff1a; #include <WiFi.h> #include <WiFiClient.h>const char* ssid "cc123"; const char* password "espressif";WiFiServ…

Python-年会抽奖

#!/usr/bin/python # coding:utf-8 # Author:Rauckimport randomclass WhoIsLuck:"""年会抽奖"""# 奖品gift [{name: 一等奖, limit: 3, desc: 泰国5日游手术费报销},{name: 二等奖, limit: 6, desc: iPhone14手机},{name: 三等奖, limit: 30, …

【Linux OS】华为openEuler操作系统与openGauss数据库安装及使用入门

华为openEuler操作系统与openGauss数据库安装及使用入门 1、软件下载1.1、openEuler1.2、openGauss1.3、Data Studio 2、系统安装2.1、创建虚拟机2.2、安装操作系统2.3、登录系统 3、数据库安装及设置3.1、数据库安装3.2、数据库管理3.3、数据库设置 4、数据库访问4.1、Navicat…

Redis:IO多路复用深度解析

目录 一、Multiplexing&#xff08;IO多路复用&#xff09;1.是什么2.能干嘛3.Reactor设计模式4.select, poll, epoll 都是I/O多路复用的具体的实现4.1 select方法4.2 poll方法4.3 epoll方法4.4 三个方法对比 5.5种 I/O 模型总结6.为什么3个都保有 一、Multiplexing&#xff08…