Spring Cloud之服务入口Gateway之Gateway Filter Factories

Spring Cloud之服务入口Gateway之Gateway Filter Factories

目录

Gateway Filter Factories

GatewayFilter

application.yml

接收参数并打印

启动服务并访问

GatewayFilter说明

AddRequestHeader GatewayFilter Factory

AddRequestHeadersIfNotPresent GatewayFilter Factory

AddResponseHeader GatewayFilter Factory

RemoveRequestHeader GatewayFilter Factory

RemoveResponseHeader GatewayFilter Factory

RequestRateLimiter GatewayFilter Factory

Retry GatewayFilter Factory

 RequestSize GatewayFilter Factory

Default Filters

Default Filter的使用

application.yml

设置响应状态码为BAD_GATEWAY

启动服务并访问

GlobalFilter

GlobalFilter的使用

添加依赖

添加配置

启动服务并访问


Gateway Filter Factories

Predicate决定了请求由哪⼀个路由处理, 如果在请求处理前后需要加⼀些逻辑, 这就是Filter(过滤器)的作⽤范围了.

Filter分为两种类型: Pre类型和Post类型.

Pre类型过滤器: 路由处理之前执⾏(请求转发到后端服务之前执⾏), 在Pre 类型过滤器中可以做鉴权, 限流等.
Post类型过滤器: 请求执⾏完成后, 将结果返回给客⼾端之前执⾏.

Spring Cloud Gateway 中内置了很多Filter, ⽤于拦截和链式处理web请求. ⽐如权限校验, 访问超时等设定.

Spring Cloud Gateway从作⽤范围上, 把Filter可分为GatewayFilter 和GlobalFilter.

GatewayFilter: 应⽤到单个路由或者⼀个分组的路由上.
GlobalFilter: 应⽤到所有的路由上, 也就是对所有的请求⽣效.
GatewayFilter

GatewayFilter 同 Predicate 类似, 都是在配置⽂件 application.yml 中配置,每个过滤
器的逻辑都是固定的. ⽐如 AddRequestParameterGatewayFilterFactory 只需要在配置⽂件
中写 AddRequestParameter , 就可以为所有的请求添加⼀个参数, 我们先通过⼀个例⼦来演⽰
GatewayFilter如何使⽤.

application.yml
server: port: 8888 spring: application: name: gateway cloud: nacos: discovery: server-addr: 47.98.109.138:8848 gateway: metrics: enabled: true routes: - id: order-service #路由规则id, 随便起, 不重复即可 uri: lb://order-service/ #目标服务地址 predicates: #路由条件 - Path=/order/**,/feign/** filters: - AddRequestParameter=userName, xiaoming - id: product-service uri: lb://product-service/ predicates: - Path=/product/**
接收参数并打印
@Slf4j @RequestMapping("/feign") @RestController public class FeignController { @Autowired private ProductApi productApi; @RequestMapping("test") public String test(Integer id,String userName) { log.info("userName: "+userName); return "接收到参数"+id; } }
启动服务并访问
GatewayFilter说明
AddRequestHeader GatewayFilter Factory
为当前请求添加Header
AddRequestHeadersIfNotPresent GatewayFilter Factory
为当前请求添加请求参数
AddResponseHeader GatewayFilter Factory
为响应结果添加Header
RemoveRequestHeader GatewayFilter Factory
从当前请求删除某个Header
RemoveResponseHeader GatewayFilter Factory
从响应结果删除某个Header
RequestRateLimiter GatewayFilter Factory
为当前⽹关的所有请求执⾏限流过滤, 如果被限流, 默认会响应HTTP429-TooManyRequests默认提供了RedisRateLimiter的限流实现, 采⽤令牌桶算法实现限流功能。

说明:

redis-rate-limiter.replenishRate : 令牌填充速度, 即每秒钟允许多少个请求(不丢弃任何请求)
redis-rate-limiter.burstCapacity : 令牌桶容量, 即每秒⽤⼾最⼤能够执⾏的请求数量(不丢弃任何请求). 将此值设置为零将阻⽌所有请求
redis-rate-limiter.requestedTokens : 每次请求占⽤⼏个令牌, 默认为 1 。
Retry GatewayFilter Factory
针对不同的响应进⾏重试. 当后端服务不可⽤时, ⽹关会根据配置参数来发起重试请求.

说明:

retries: 重试次数, 默认为3
status:HTTP请求返回的状态码, 针对指定状态码进⾏重试. 对应
org.springframework.http.HttpStatus
 RequestSize GatewayFilter Factory
设置允许接收最⼤请求包的⼤小. 如果请求包大小超过设置的值, 则返回 413 Payload Too
Large.
请求包大小, 单位为字节, 默认值为5M
Default Filters
添加⼀个filter并将其应⽤于所有路由, 这个属性需要⼀个filter的列表
Default Filter的使用
application.yml
server: port: 8888 spring: application: name: gateway cloud: nacos: discovery: server-addr: 47.98.109.138:8848 gateway: metrics: enabled: true routes: - id: order-service #路由规则id, 随便起, 不重复即可 uri: lb://order-service/ #目标服务地址 predicates: #路由条件 - Path=/order/**,/feign/** filters: - AddRequestParameter=userName, xiaoming - name: Custom #过滤器名称 args: name: test_custom - id: product-service uri: lb://product-service/ predicates: - Path=/product/** default-filters: - name: Retry args: retries: 3 statuses: BAD_GATEWAY
设置响应状态码为BAD_GATEWAY
@RequestMapping("/order") @RestController public class OrderController { @Autowired private OrderService orderService; @RequestMapping("/{orderId}") public OrderInfo getOrderById(@PathVariable("orderId") Integer orderId, ServerHttpResponse response) { response.setStatusCode(BAD_GATEWAY); return orderService.selectOrderById(orderId); } }
启动服务并访问

可以看到,一共是四次,第一次时访问,后三次才是Retry的次数。

GlobalFilter
GlobalFilter是Spring Cloud Gateway中的全局过滤器, 它和GatewayFilter的作⽤是相同的.
GlobalFilter 会应⽤到所有的路由请求上, 全局过滤器通常⽤于实现与安全性, 性能监控和⽇志记录等相关的全局功能.

Spring Cloud Gateway 内置的全局过滤器也有很多, ⽐如:

• Gateway Metrics Filter: ⽹关指标, 提供监控指标
• Forward Routing Filter: ⽤于本地forword, 请求不转发到下游服务器
• LoadBalancer Client Filter: 针对下游服务, 实现负载均衡
GlobalFilter的使用
添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
添加配置
spring: cloud: gateway: metrics: enabled: true management: endpoints: web: exposure: include: "*" endpoint: health: show-details: always shutdown: enabled: true
启动服务并访问

查看所有监控的信息链接

访问“http://127.0.0.1:8888/actuator”,显示所有监控的信息链接

Read more

Python 2026 年发展局势:AI 时代的 “通用基础设施语言”

2026 年的 Python 已从 “热门编程语言” 进化为全球数字生态的核心基础设施语言,其地位不仅稳固且进一步强化,同时也面临新的机遇与挑战,整体呈现 “一核多翼、优势固化、局部竞争” 的格局。 一、核心优势:AI + 全生态双轮驱动,地位无可替代 1. AI / 大模型领域的绝对霸主这是 Python 最核心的护城河。2026 年大模型落地、AI Agent 开发、多模态应用、低代码 AI 工具等场景中,Python 依然是95% 以上开发者的首选语言: * 生态垄断:PyTorch 3.0、TensorFlow 2.18、LangChain 2.0、Transformers 等核心框架均以 Python 为第一开发语言; * 效率优势:

By Ne0inhk
华为OD机试双机位C卷-FLASH坏块监测系统(Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷-FLASH坏块监测系统(Py/Java/C/C++/Js/Go)

FLASH坏块监测系统 华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解 题目描述 开发一个 FLASH 坏块监测系统,能够监测 FLASH 中坏块的数量。FLASH 介质以一个大小为 m×n的二维二进制矩阵表示,其中:0 表示正常,1 表示异常。最初,FLASH 介质中的所有单元格都是正常(即,所有单元格都是 0)。 系统运行过程中,FLASH 坏块不断产生:随着系统持续运行,某一个时刻 i,FLASH 介质中的某个单元格 (ri,ci)由正常变为异常。返回一个整数数组 result,其中 result[i] 是 FLASH 介质中第

By Ne0inhk
项目--协程库(C++)模块解析篇

项目--协程库(C++)模块解析篇

参考:sylar的协程库 GitHub链接:Cookies-CGQ/myCoroutine: 协程库,支持协程调度、定时器、事件调度功能 协程库模块的详解与代码分析 需要的类 * thread:这个模块的意义主要是使用多线程配合多协程更好地利用多核CPU的资源 * fiber:负责协程的创建、执行、暂停等真正运行任务的地方 * scheduler:调度器,负责调度协程的执行和暂停等,无需用户手动执行和暂停,做到自动调度 * ioscheduler:io+scheduler,协程库是需要使用在服务器上的,服务器上的fd都配合不了,那不就成了一个玩具项目,此类使用epoll监听fd上绑定的读写事件,当读写事件触发将其放入到调度器中等待调度 * timer:服务器定时器,用于定时执行任务,所以此类完成定时器的创建、删除、取消,使用最小堆的结果,将超时定时器触发作为固定信号tickle来触发ioscheduler等待的epoll_wait * hook:hook+ioscheduler才能完全体现出一个非阻塞的服务器框架,虽然前面实现了协程的调度,但是每个系统调用中,不去

By Ne0inhk
Python 微信小程序的班级学生奖惩成绩信息管理系统

Python 微信小程序的班级学生奖惩成绩信息管理系统

文章目录 * 技术架构设计 * 数据库设计 * 前端功能模块 * 后端API开发 * 权限控制系统 * 数据统计功能 * 部署方案 * 性能优化策略 * 系统设计与实现的思路 * 主要技术与实现手段 * 源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 技术架构设计 微信小程序前端采用微信原生框架,后端使用Python Flask/Django框架,数据库选用MySQL或SQLite。前后端通过RESTful API交互,数据格式采用JSON。 数据库设计 学生表包含学号、姓名、班级等基础字段;奖惩记录表关联学生ID,包含类型(奖励/惩罚)、分值、原因、时间等字段;成绩表关联学生ID,包含科目、分数、学期等字段。 前端功能模块 微信小程序页面分为学生信息展示页、奖惩记录页、成绩查询页。使用WXML/WXSS构建界面,通过wx.request调用后端API获取数据。实现下拉刷新、分页加载等交互功能。 后端API开发

By Ne0inhk