网关Gateway

article/2025/8/21 18:29:11

目录

     Gateway作用

     Gateway使用


     Gateway作用

        在微服务项目中,没有引入网关时,项目架构如下:

        引入网关后,架构如下:

        引入网关后,有如下优势:

        1、客户端请求经过网关向后台统一分发请求,后台微服务的增加、减少对客户端影响较小

        2、客户端请求到每个后台微服务,可以经过网关实现统一的鉴权认证

        3、网关可以对后台微服务做限流管理

     Gateway使用

       Gateway中有如下核心概念:

        1、路由route:路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的 URL 和配置的路由匹配。

        2、断言predicates:可以理解为匹配到路由的条件

        3、过滤器Filter:对匹配的路由请求和响应进行处理

        如下图配置信息,当访问http://网关ip:端口/blog-user/blogUser/getById,系统会将地址自动转发到 http://blog-user服务ip:端口/blogUser/getById 的这个请求中,并且注意,通过uri: lb://blog-user  这样的配置,如果系统存在多个blog-user服务实例,gateway网关会负载均衡(轮询)的方式转发的对应的blog-user服务实例

        在微服务项目开发过程中,通常会建立一个网关项目,专门负责对各个微服务请求转发的管理,示例中建立了blog-gateway项目,步骤如下:

        1、添加gateway依赖

        由于gateway应用也会注册到nacos上,所以nacos服务发现的依赖也需要加上

        2、配置网关信息

        从下图中可以看出,配置了2个网关路由规则,

        当网关请求地址是:http://localhost:7777/blog-user/blogUser/getById时,系统会从nacos找到 blog-user微服务名,进而请求到实际的地址:http://localhost:8088/blogUser/getById

        当网关请求地址是:http://localhost:7777/blog-content/blogContent/getById?id=1时,系统会从nacos找到 blog-content微服务名,进而请求到实际的地址:http://localhost:8888/blogContent/getById?id=1 或 http://localhost:9999/blogContent/getById?id=1

        blog-gateway注册在nacos中的信息如下:

        blog-user注册在nacos中的信息如下:

        blog-content注册在nacos中的信息如下:

        3、实现网关自定义的过滤器

        自定义过滤器分两种。全局过滤器:实现globalFilter和order接口。局部过滤器:实现AbstractGatewayFilterFactory接口并自定义或者使用父类的Config类 ,然后在配置文件中将过滤器进行配置(指明哪种路由用到自定义过滤器)。

        下图自定义了网关过滤器CustomValidator,并配置在yml中,当请求网关地址:http://localhost:7777/blog-user/blogUser/getById 时,会先执行过滤器逻辑,然后再执行请求实际地址逻辑。

package com.gingko.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.core.annotation.Order;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;import java.util.ArrayList;
import java.util.List;/*** 自定义过滤器 要在yml文件里配置自定义过滤器的过滤器名称CustomValidator (CustomValidatorGatewayFilterFactory)* (GatewayFilterFactory是默认名称,前面的就是自定义过滤器的名称)* filters:*   - CustomValidator=condition1,condition2,condition3,condition4*/
@Order(1)
@Component
@Slf4j
public class CustomValidatorGatewayFilterFactoryextends AbstractGatewayFilterFactory<CustomValidatorGatewayFilterFactory.Config> {public CustomValidatorGatewayFilterFactory() {super(Config.class);}@Overridepublic GatewayFilter apply(Config config) {return ((exchange, chain) -> {log.info("进入自定义过滤器...");ServerHttpRequest request = exchange.getRequest();ServerHttpResponse response = exchange.getResponse();String key = config.getParam();log.info("参数信息:{},{},{},{}" ,config.getParam(),config.getParam2(),config.getParam3(),config.getParam4() );return chain.filter(exchange);});}/***  如果是自定义config 则需要重写该方法返回list集合 以便routdefine通过反射传回参数*  ShortcutConfiguratble 这个类获取配置*  RouteDefinitionRouteLocator.getFilters 获得所有过滤器 然后按顺序执行* @return*/@Overridepublic List<String> shortcutFieldOrder() {List<String> list = new ArrayList<>();list.add("param");list.add("param2");list.add("param3");list.add("param4");return list;}/*** 你再路由配置那里给过滤器设置了多少参数那么就创建多少个参数变量来接收值*/static public class Config {private String param;private String param2;private String param3;private String param4;public String getParam2() {return param2;}public void setParam2(String param2) {this.param2 = param2;}public String getParam3() {return param3;}public void setParam3(String param3) {this.param3 = param3;}public String getParam4() {return param4;}public void setParam4(String param4) {this.param4 = param4;}public String getParam() {return param;}public void setParam(String param) {this.param = param;}}
}

          控制台运行结果如下:从日志时间上可以看出,请求网关地址:http://localhost:7777/blog-user/blogUser/getById 后,先执行的过滤器逻辑,打印输出了参数信息(p1,p2,p3,p4),然后执行了实际分发地址的逻辑。


http://www.hkcw.cn/article/ayqVfOdxSa.shtml

相关文章

Python打卡训练营-Day15-复习日

浙大疏锦行 作业&#xff1a; 尝试找到一个kaggle或者其他地方的结构化数据集&#xff0c;用之前的内容完成一个全新的项目&#xff0c;这样你也是独立完成了一个专属于自己的项目。 要求&#xff1a; 有数据地址的提供数据地址&#xff0c;没有地址的上传网盘贴出地址即可。尽…

使用MFC 写dap上位机在线烧写FLASH

1.使用BUS Hound 抓取KEIL5 正常烧写的通讯包协议 2.结束DAP 源码分析每条数据&#xff0c;主要通讯靠05 和06 3.动态加载FLM烧写算法. 最终效果

Orcad 修复Pin Name重复问题

Duplicate Pin Name “VDD” found on Package 问题描述 1、Orcad创建网表时报错,错误,描述为Pin Name重复(在Orcad中是不允许非Power的pin type的Pin Name相同的) #26 ERROR(ORCAP-36041): Duplicate Pin Name “VDD” found on Package 处理方式 修

以军称拦截也门胡塞武装发射的一枚导弹

以色列国防军当地时间29日发表声明称,以空军当天拦截了也门胡塞武装发射的一枚导弹,包括特拉维夫在内的部分以色列中部地区当天响起防空警报。有报道称,耶路撒冷传出爆炸声。以色列急救组织表示,暂时没有接到关于此次导弹袭击的人员伤亡报告。△本古里安国际机场(资料图)…

从微积分到集合论(1630-1910)(历史简介)——第3章——数学分析的出现及其基础性进展(1780-1880)(I.Grattan-Guinness)

第 3 章 数学分析的出现及其基础性进展 (The Emergence of Mathematical Analysis and its Foundational Progress,1780-1880) Grattan-Guinness 目录 3.1 数学分析及其与代数和几何的关系(Mathematical analysis and its relationship to algebra and geometry) 3.2 …

2-向量可视化

确定适用于向量的绘图类型 任务一 plot(Year,Aus_Can); 任务二 area(Year,Aus Can) 结果 任务三 stem(Year,Aus_Can) 自定义绘图属性 %任务一 plot(Year,Australia,"-ok") 结果 表示&#xff1a;&#xff08;按要求完成任务&#xff09; 用 黑色实线 连接数据点…

语音识别中的XML语法应用范例

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;XML是一种标记语言&#xff0c;用于数据传输和存储&#xff0c;而非显示。在语音识别中&#xff0c;它负责定义和结构化语音识别语法&#xff0c;通过元素如词汇、发音规则和语法限制等&#xff0c;帮助计算机理…

B站bilibili视频转文字字幕下载方法

本文将讲述介绍一种使用本地工具如何快速的下载B站的字幕为本地文本文件的方法。 通常获取B站字幕需要在浏览器中安装第三方插件&#xff0c;通过插件获取字幕。随着大模型&#xff0c;生成式AI&#xff0c;ChatGPT的应用&#xff0c;B站也提供了AI小助手对视频的内容进行总结…

计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作

计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作 一、前言二、滤波:图像的精细化处理​2.1 滤波基础概念​2.1.1 滤波的本质​2.1.2 图像噪声来源与类型​2.2 线性滤波​2.2.1 均值滤波​2.2.2 高斯滤波​2.3 非线性滤波​2.3.1 中值滤波​三、边缘检测:图像轮廓的精…

Kimi-Audio音频大模型介绍、本地部署与开发

目录 一、模型介绍 二、模型部署 1、创建工作空间 2、下载模型 3、下载依赖 4、下载模型库 5、下载glm4_tokenizer 6、代码编程修改 4 月 26 日&#xff0c;Moonshot AI正式宣布推出Kimi-Audio&#xff0c;一款全新的开源音频基础模型&#xff0c;旨在推动音频理解、生…

YOLO11n动态库部署实战:Windows11 + C++ + OpenCV + DDL完整封装流程详解(保姆级教程)

文章目录 前言一、Windows11CPU算法环境搭建1. 安装pycharm2. 安装python 3.8.103. 安装pytorch 1.13.04. 安装mingw64 14.2.05. 安装cmake 3.31.66. 安装 Visual Studio 2022 二、运行YOLO模型并转换为ONNX文件1. 下载yolo11源码和 ultralytics-8.3.31-py3-none-any.whl 文件2…

AI视频自动生成本地部署,完美实现“剪映”图文成片功能

项目说明 本项目仅适用于学习和研究&#xff0c;不得用于商业使用。所有推荐开源项目本人都亲测可运行。如有侵权&#xff0c;请通知删除。 项目简介 只需提供一个视频 主题 或 关键词 &#xff0c;就可以全自动生成视频文案、视频素材、视频字幕、视频背景音乐&#xff0c;然…

计算机视觉常用数据集Cityscapes的介绍、下载、转为YOLO格式进行训练

我在寻找Cityscapes数据集的时候花了一番功夫&#xff0c;因为官网下载需要用公司或学校邮箱邮箱注册账号&#xff0c;等待审核通过后才能进行下载数据集。并且一开始我也并不了解Cityscapes的格式和内容是什么样的&#xff0c;现在我弄明白后写下这篇文章&#xff0c;用于记录…

抖音采集工具Gui版:高效无水印下载抖音视频的神器

抖音采集工具Gui版是一款由52pojie论坛的biqiang大神自制的功能强大的采集工具。 它专为抖音视频下载设计&#xff0c;能够帮助用户轻松获取抖音平台上的各种视频资源&#xff0c;支持批量下载&#xff0c;极大地提升了下载效率。 全面的资源采集 支持采集抖音作品、Webp动态封…

YOLOv11实时目标检测 | 摄像头视频图片文件检测

在上篇文章中YOLO11环境部署 || 从检测到训练https://blog.csdn.net/2301_79442295/article/details/145414103#comments_36164492&#xff0c;我们详细探讨了YOLO11的部署以及推理训练&#xff0c;但是评论区的观众老爷就说了&#xff1a;“博主博主&#xff0c;你这个只能推理…

【计算机视觉】生成对抗网络(GAN)在图像生成中的应用

生成对抗网络(GAN)在图像生成中的应用 一、前言1.1 图像生成的重要性与挑战​1.2 GAN 的发展历程​二、生成对抗网络(GAN)基础​2.1 GAN 的基本原理​2.1.1 生成器与判别器​2.1.2 对抗训练过程​2.2 GAN 的数学原理​2.3 GAN 的代码实现(以 PyTorch 为例)​2.4 GAN 训练…

Coze实战:基于数据库的视频混剪工作流搭建(喂饭级教程)

作者&#xff1a;后端小肥肠 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; Coze一键生成打字机效果书单视频&#xff08;保姆级工作流拆解&#xff09;-CSDN博客 Coze实战:《如果书籍会说话》保姆级教程&#xff…

自动语音识别(ASR)技术详解

语音识别&#xff08;Automatic Speech Recognition, ASR&#xff09;是人工智能和自然语言处理领域的重要技术&#xff0c;旨在将人类的语音信号转换为对应的文本。近年来&#xff0c;深度学习的突破推动语音识别系统从实验室走入日常生活&#xff0c;为智能助手、实时翻译、医…

计算机视觉——YOLO11原理代码分块解读与模型基准对比测试

一、概述 2024 年对 YOLO 而言是具有里程碑意义的一年。这一年&#xff0c;YOLO 系列在 9 月的最后一天推出了其年度第三部重磅之作。2024 年 2 月 21 日&#xff0c;距离 2023 年 1 月 YOLOv8 正式发布已过去一年有余&#xff0c;YOLOv9 终于问世。YOLOv9 创新性地提出了可编…

[嵌入式实验]实验四:串口打印电压及温度

一、实验目的 熟悉开发环境在开发板上读取电压和温度信息使用串口和PC通信在PC上输出当前电压和温度信息 二、实验环境 硬件&#xff1a;STM32开发板、CMSIS-DAP调试工具 软件&#xff1a;STM32CubeMX软件、ARM的IDE&#xff1a;Keil C51 三、实验内容 配置相关硬件设施 &…