springCloud-2021.0.9 之 GateWay 示例

文章目录

  • 前言
    • springCloud-2021.0.9 之 GateWay 示例
      • 1. GateWay 官网
      • 2. GateWay 三个关键名称
      • 3. GateWay 工作原理的高级概述
      • 4. 示例
        • 4.1. POM
        • 4.2. 启动类
        • 4.3. 过滤器
        • 4.4. 配置
      • 5. 启动/测试

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


springCloud-2021.0.9 之 GateWay 示例

这里我介绍一下,我用到的springCloud 是2021.0.9版本。
Maven 依赖管理配置引入 Spring Cloud 的 BOM(Bill of Materials)文件,主要作用如下:

  • 版本统一:通过引入 BOM 文件,您可以统一管理项目中所有 Spring Cloud 相关依赖的版本,避免版本冲突和不一致。

  • 简化依赖声明:在子模块中,您无需显式指定 Spring Cloud 相关依赖的版本号,Maven 会自动从 BOM 中获取版本信息。

与以前的引入方式相比,这种方法提供了更好的版本控制和依赖管理,特别是在处理多个子模块和复杂的依赖关系时,能够有效减少手动管理版本的复杂性。

1. GateWay 官网

下面是我用的版本官网api:

https://docs.spring.io/spring-cloud-gateway/docs/3.1.9/reference/html/

2. GateWay 三个关键名称

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

Predicate:这是一个Java 8 函数谓词。输入类型是Spring 框架ServerWebExchange。这允许您匹配 HTTP 请求中的任何内容,例如标头或参数。

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

3. GateWay 工作原理的高级概述

下图提供了 Spring Cloud Gateway 工作原理的高级概述:

在这里插入图片描述
客户端向 Spring Cloud Gateway 发出请求。如果 Gateway Handler Mapping 确定请求与路由匹配,
则将其发送到 Gateway Web Handler。此处理程序通过特定于请求的过滤器链运行请求。过滤器被虚线分开的原因是过滤器可以在发送代理请求之前和之后运行逻辑。所有“前”过滤器逻辑都​​会执行。然后发出代理请求。发出代理请求后,运行“后”过滤器逻辑。

4. 示例

4.1. POM
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.15</version></parent><groupId>org.example</groupId><artifactId>springCloud-Gateway</artifactId><version>1.0-SNAPSHOT</version><name>springCloud-Gateway</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><spring-cloud.version>2021.0.9</spring-cloud.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!--作用: Spring Cloud Gateway 是一个基于 Spring WebFlux 和 Project Reactor 实现的 API 网关服务,它可以作为微服务架构的入口,处理路由请求、负载均衡、身份认证等功能。用途: 主要用于处理微服务的路由请求,你可以定义路由规则,决定哪些请求转发到哪些微服务。--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--作用: 为你的应用程序提供 Eureka 客户端的支持,能够与 Eureka 服务发现注册中心交互。客户端可以向 Eureka 服务器注册自身,并从中获取其他服务实例的注册信息,实现服务发现和负载均衡。用途: 当应用启动时,它会自动注册到 Eureka Server,并能够根据其他服务的注册信息进行服务发现。--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!--a作用: 提供了一组用于监控和管理应用程序的端点,比如健康检查、性能指标、日志级别调整等。它能够暴露很多应用的内部状态,并支持通过 HTTP、JMX 或其他方式访问这些信息。用途: 通过 Actuator,你可以轻松地监控和管理 Spring Boot 应用,结合 Spring Boot Admin 还能进行图形化管理。--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--作用: Sleuth 提供了分布式追踪的功能,可以在微服务架构中追踪请求的流转路径,帮助诊断和调试系统性能问题。Sleuth 会为每个请求生成追踪 ID 和 span ID,记录请求在不同微服务中的处理过程。用途: 在微服务架构中,用于监控和分析请求的处理流程,帮助你追踪请求跨多个服务的链路。--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.6.15</version></plugin></plugins></build>
</project>
4.2. 启动类
package org.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class GateWayApplication {public static void main(String[] args) {SpringApplication.run(GateWayApplication.class, args);}}
4.3. 过滤器
package org.example.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.sleuth.CurrentTraceContext;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Component
public class ResponseFilter implements GlobalFilter , Ordered {private static final String CORRELATION_ID = "yzy-correlation-id";@Autowiredprivate CurrentTraceContext currentTraceContext;@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {return chain.filter(exchange).then(Mono.fromRunnable(() -> {ServerHttpResponse response = exchange.getResponse();response.getHeaders().add(CORRELATION_ID, currentTraceContext.context().traceId());}));}@Overridepublic int getOrder() {return -1;}
}
4.4. 配置
server:port: 8809netty:idle-timeout: 10m # Netty 服务器的空闲超时时间为 10 分钟,这决定了在没有网络活动时,连接会被关闭。
eureka:instance:prefer-ip-address: true # 优先ip注册client:service-url:defaultZone: http://127.0.0.1:8761/eureka # 注册中心地址
spring:application:name: springCloud-Gatewaycloud:gateway:httpclient:connect-timeout: 1000 # 配置全局 http 超时response-timeout: 5s # 配置全局 http 超时defaultFilters:- StripPrefix=1 # 默认移除前1个路径段routes:- id: springCloudServiceAuri: lb://SPRINGCLOUDSERVICEApredicates:- Path=/springCloudServiceA/**- id: springCloudServiceBuri: lb://SPRINGCLOUDSERVICEBpredicates:- Path=/springCloudServiceB/**

5. 启动/测试

如下图,启动成功!!

在这里插入图片描述
在这里插入图片描述

测试:
http://127.0.0.1:8809/springCloudServiceA/api/test/scan
在这里插入图片描述
请求链路:
postmain -> SPRINGCLOUD-GATEWAY->SPRINGCLOUDSERVICEA

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

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

相关文章

华为IPD简介

创作灵感 现在“熟悉华为IPD”经常出现在高级招聘岗位能力要求上&#xff0c;于是作者写下此文章以此巩固相关知识储备 名词解释 华为IPD&#xff08;Integrated Product Development&#xff0c;集成产品开发&#xff09;是华为引入并优化的一套产品开发管理体系&#xff0…

UniApp 中制作一个横向滚动工具栏

前言 最近在用 UniApp 开发项目时&#xff0c;需要一个横向滑动的工具栏。常见的工具栏一般都是竖着的&#xff0c;但横向滑动的工具栏不仅能展示更多内容&#xff0c;还能让界面看起来更加丰富。不过很多朋友可能会发现&#xff0c;如何让内容“横着”展示又不变形、能流畅滚…

java nio 原理 非阻塞IO Netty

一、为什么必须去了解NIO 首先你需要之后Netty的主要实现手段就是Nio,很多人一直学不明白Netty&#xff0c;根本原因是 除了日常开发中很难能够实践&#xff0c;很大一部分原因是不熟悉NIO&#xff0c;事实上真正熟悉了NIO和它背后的原理之后&#xff0c;去查看Netty的源码就有…

Managed Lustre 和 WEKA:高性能文件系统的对比与应用

Managed Lustre 和 WEKA&#xff1a;高性能文件系统的对比与应用 1. 什么是 Managed Lustre&#xff1f;主要特点&#xff1a;适用场景&#xff1a; 2. 什么是 WEKA&#xff1f;主要特点&#xff1a;适用场景&#xff1a; 3. Managed Lustre 和 WEKA 的对比4. 如何选择 Managed…

el-select 添加icon

Element-ui-plus 新版本&#xff1a;Select 选择器 | Element Plus 要实现如上的效果 &#xff0c;要用到具名插槽 prefix&#xff0c;看代码&#xff1a; <template><el-dialog ref"dialogRef" v-model"dialogVisible" :title"title"…

【Linux】Ubuntu Linux 系统 ——PHP开发环境

ℹ️大家好&#xff0c;我是练小杰&#xff0c;元宵节到了&#xff0c;在此祝大家元宵节快乐&#x1f606; 新的一年里&#xff0c;愿你步步高升&#xff0c;事事如意&#xff0c;心想事成&#xff01;! 本文是关于Linux 操作系统中部署PHP开发环境这部分基础内容&#xff0c;后…

非谓语动词三驾马车

文章目录 1. 不定式基本结构不定式的由来1.不受主语的人称和数的限制2.没有限定时态3.可以在句子中充当不同的成分 常见句子成分1. 作主语2. 作表语3. 作宾语4. 作定语5. 作状语 不定式 vs 动名词 2. 动名词动名词做成分作主语作主语补语作定语作宾语介词宾语 3. 分词(现在、过…

【Apache Paimon】-- 16 -- 利用 paimon-flink-action 同步 kafka 数据到 hive paimon 表中

目录 引言CDC 技术概述 2.1 什么是 CDC2.2 CDC 的应用场景Kafka 作为 CDC 数据源的原理与优势 3.1 Kafka 的基本架构3.2 Kafka 在 CDC 中的角色

利用Python pandas 数据清洗详细教程

文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python3 使用 pip 安装 Pandas 二、使用步骤1.读取数据2.处理缺失值3. 处理重复值4. 处理异常值5. 数据类型转换6. 处理不一致的数据 前言 pandas 是 Python 数据处理与分析的得力工具&#xff0c;功能强大&#xff0c;是数据…

qt的QMainWindow保存窗口和恢复窗口状态

保存窗口状态 QSettings settings("MyCompany", "MyApp"); // 指定存储的应用信息 settings.setValue("mainWindowState", saveState());saveState() 返回一个 QByteArray&#xff0c;包含 所有停靠窗口和工具栏的状态。QSettings 用于存储数据…

haproxy实现MySQL服务器负载均衡

1.环境准备 准备好下面四台台服务器&#xff1a; 主机名IP角色open-Euler1192.168.121.150mysql-server1openEuler-2192.168.121.151mysql-server2openEuler-3192.168.121.152clientRocky8-1192.168.121.160haproxy 2.mysql服务器配置 1.下载mariadb #下载mariadb [rootop…

Uniapp 原生组件层级过高问题及解决方案

文章目录 一、引言&#x1f3c5;二、问题描述&#x1f4cc;三、问题原因❓四、解决方案&#x1f4af;4.1 使用 cover-view 和 cover-image4.2 使用 subNVue 子窗体4.3 动态隐藏原生组件4.4 使用 v-if 或 v-show 控制组件显示4.5 使用 position: fixed 布局 五、总结&#x1f38…

Neo4j集群学习

文章目录 官方指导文档Neo4j因果集群核心服务器只读副本因果一致性 Neo4j集群搭建Neo4j企业版下载集群简介虚拟机准备jdk安装实施搭建访问neo4j Web服务 集群添加Core节点 官方指导文档 Neo4j 5 ClusterNeo4j 5 Basic Cluster Neo4j因果集群 集群是Neo4企业版中所提供的功能…

Ant-Design-Vue:Button按钮SVG图标垂直未居中问题

问题描述 如下图所示&#xff0c;在使用Ant-Design-Vue UI组件库提供的Button按钮Icon组件开发页面时&#xff0c;发现icon图标并没有垂直居中。 icon插槽-图标垂直不居中 再看一个官网的例子&#xff0c; 官网老子 问题排查 首先&#xff0c;考虑是否由于当前的页面布局&#…

OpenMetadata MySQL 数据库使用率提取管道实现解析

目录 架构概述核心组件源码分析使用率指标定义数据提取流程图源码类图配置与扩展指南架构概述 OpenMetadata 通过可插拔的元数据摄取框架实现对 MySQL 使用率数据的采集,核心流程包含三个阶段: 数据采集层:从 MySQL performance_schema 和 sys schema 获取原始指标指标处理…

慧星云+Chatbox :云上部署DeepSeek告别使用卡顿

DeepSeek 官网卡顿 DeepSeek 系列模型的现象级爆火&#xff0c;引发国内外广泛关注与讨论热潮&#xff0c;然而充满热情的使用者也让 DeepSeek 官网崩溃导致无法正常使用。 为了解决用户使用痛点&#xff0c;慧星云推出了云端蒸馏与满血版的 DeepSeek&#xff0c;搭配 Chatbox …

DeepSeek与ChatGPT的全面对比

在人工智能&#xff08;AI&#xff09;领域&#xff0c;生成式预训练模型&#xff08;GPT&#xff09;已成为推动技术革新的核心力量。OpenAI的ChatGPT自发布以来&#xff0c;凭借其卓越的自然语言处理能力&#xff0c;迅速占据市场主导地位。然而&#xff0c;近期中国AI初创公…

LeetCode1706

LeetCode1706 目录 LeetCode1706题目描述示例题目理解问题描述 示例分析思路分析问题核心 代码段代码逐行讲解1. 获取网格的列数2. 初始化结果数组3. 遍历每个球4. 逐行模拟下落过程5. 检查是否卡住6. 记录结果7. 返回结果数组 复杂度分析时间复杂度空间复杂度 总结的知识点1. …

前后端的身份认证

现代Web应用程序中&#xff0c;身份认证是确保用户数据安全的关键环节。无论你是开发一个简单的博客系统还是复杂的企业级应用&#xff0c;正确实现身份验证机制都是至关重要的。本文将探讨如何在前后端分离的架构下&#xff0c;使用Node.js作为后端来实现安全有效的身份认证。…

如何调整 Nginx工作进程数以提升性能

&#x1f3e1;作者主页&#xff1a;点击&#xff01; Nginx-从零开始的服务器之旅专栏&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年2月15日14点20分 Nginx 的工作进程数&#xff0…