网关和过滤器学习

ops/2025/2/25 5:17:57/

一、网关是什么?有什么用?

        在微服务架构中,一个模块可能会部署到多个不同地址的服务器上,比如一个item模块,它的端口号可能有8081、8082等。如果是以前,当用户发送请求时只能指定发送给某一个地址,但是网关可以帮我们进行转发请求到对应的地址或端口上,同时帮我们实现负载均衡

二、网关和Nacos有什么区别?

        网关主要负责接收和处理外部请求,对请求进行路由、过滤、认证、限流等操作,将请求合理地分发到后端的各个微服务实例上;Nacos主要用于服务的注册和发现,帮助开发人员管理服务的生产者和消费者

三、提示

       使用网关服务,通常需要创建一个网关的模块(像别的模块一样),然后在网关模块添加依赖,并在网关的application.yml填写对应的配置信息,启动网关application之后才能使用

使用方法

①创建网关项目

②添加依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

③修改配置文件application.yml,配置网关路由

server:port: 8080   //网关服务的
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848gateway:routes:- id: item uri: lb://item-service predicates: - Path=/items/**,/search/** filters:- AddRequestHeader=X-Request-red, blue- id: carturi: lb://cart-servicepredicates:- Path=/carts/**......

id(必填)是路由唯一标识,不能重复
uri(必填)就是路由到哪个服务 对应服务的url,通常前面加 lb 让其负载均衡
predicates(必填)是路由断言,路由断言有很多种规则,比如path、method等,用户的请求必须满足所有的路由断言才会转发到对应的服务
filters(选填)是过滤器,会在拦截请求后对请求做一定操作后再转发

四、过滤器


当一个请求到达网关的时候,首先他会根据路径断言匹配对应的route,然后加载这个route下对应的filters,逐个遍历对应的过滤器,所以我们可以自定义一些过滤器添加到filters,比如我们要做登录校验功能,就是添加到这里

过滤器又分为两类:
GlobalFilter:全局过滤器,作用范围是所有路由,不可配置

GatewayFilter:路由过滤器,作用范围比较灵活,可以是任意指定的路由

自定义路由过滤器:
如下:自定义一个类实现AbstractGatewayFilterFactory,同时该类的名称一定要以GatewayFilterFactory为后缀(因为前缀是你到时候要添加到route的)

@Component
public class PrintAnyGatewayFilterFactory extends AbstractGatewayFilterFactory<Object> {@Overridepublic GatewayFilter apply(Object config) {return new GatewayFilter() {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 获取请求ServerHttpRequest request = exchange.getRequest();// 编写过滤器逻辑System.out.println("过滤器执行了");// 放行return chain.filter(exchange);}};}
}

 写完这个自定义路由过滤器后如此在application.yml中配置使用

spring:cloud:gateway:default-filters:- PrintAny # 此处直接以自定义的GatewayFilterFactory类名称前缀类声明过滤器

自定义全局过滤器类似,其实两者就是新建一个过滤器类,继承自带的过滤器类,在里面设置具体的过滤器规则,并在网关的yml里进行相应的配置,明白原理之后具体的细节问gpt即可

 


http://www.ppmy.cn/ops/161124.html

相关文章

【VUE框架】深入剖析 Vue2 与 Vue3 的 Diff 算法区别

引言 在前端开发中&#xff0c;Vue 作为一款流行的 JavaScript 框架&#xff0c;以其高效的数据驱动和响应式特性受到广泛青睐。Diff 算法是 Vue 实现高效更新 DOM 的核心机制之一&#xff0c;它通过比较新旧虚拟 DOM&#xff08;Virtual DOM&#xff09;树的差异&#xff0c;…

mysql之InnoDB 统计信息收集

文章目录 InnoDB 统计信息收集核心概念&#xff1a;统计信息的价值表级别统计信息索引级别统计信息列统计(MySQL 8.0) 统计信息的存储位置统计信息的收集方式自动统计信息收集的触发条件自动统计信息收集的具体机制手动统计信息收集&#xff1a; ANALYZE TABLE 命令 统计信息的…

【Python爬虫(46)】解锁分布式爬虫:实时数据处理的奥秘

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…

uniapp修改picker-view样式

解决问题&#xff1a; 1.选中文案样式&#xff0c;比如字体颜色 2.修改分割线颜色 3.多列时&#xff0c;修改两边间距让其平分 展示效果&#xff1a; 代码如下 <template><u-popup :show"showPicker" :safeAreaInsetBottom"false" close&quo…

Linux远程kill进程及$处理

个人博客地址&#xff1a;Linux远程kill进程及$处理 | 一张假钞的真实世界 在远程执行的命令中如果包含特殊字符&#xff08;$&#xff09;时需要转义&#xff0c;如下&#xff1a; ssh rootremote_host "ps -ef|grep process_name | grep -v grep | awk {print $2}&qu…

【后端基础】布隆过滤器原理

文章目录 一、Bloom Filter&#xff08;布隆过滤器&#xff09;概述1. Bloom Filter 的特点2. Bloom Filter 的工作原理 二、示例1. 添加与查询2. 假阳性 三、Bloom Filter 的操作1、假阳性概率2、空间效率3、哈希函数的选择 四、应用 Bloom Filter 是一种非常高效的概率型数据…

使用Hardhat实现ERC20 代币合约详解

ERC20 代币合约详解 &#x1f4b0; 1. 合约概览 // SPDX-License-Identifier: MIT pragma solidity ^0.8.20;import "openzeppelin/contracts/token/ERC20/ERC20.sol";contract MyToken is ERC20 {constructor() ERC20("MyToken", "MTK") {_min…

单臂路由

单臂路由&#xff08;Router on a Stick&#xff09;是一种网络配置方式&#xff0c;主要用于在单个物理接口上实现多个VLAN之间的路由。它通常用于交换机与路由器之间的连接&#xff0c;适用于VLAN间通信需求较小的情况。 工作原理 VLAN划分&#xff1a;交换机上配置多个VLAN…