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”,显示所有监控的信息链接

Windows 系统修复工具主要用于解决 Windows 11/10 系统中的各种常见问题,具有操作简单、功能全面等特点: 文件资源管理器修复:可解决文件资源管理器卡死、崩溃、无响应等问题,能终止崩溃循环。还可修复右键菜单无响应或选项缺失问题,以及重建缩略图缓存,让图片、视频等文件的缩略图正常显示,此外,还能处理桌面缺少回收站图标、回收站损坏等问题。 互联网和连接修复:能够刷新 DNS 缓存,加速网页加载速度,减少访问延迟。可重置 TCP/IP 协议栈,增强网络连接稳定性,减少网络掉线情况,还能还原 Hosts 文件,清除恶意程序对网络设置的篡改,保障网络安全,解决电脑重装系统后网络无法连接、浏览器主页被篡改等问题。 系统修复:集成系统文件检查器(SFC),可自动扫描并修复受损的系统文件。能解决 Windows 激活状态异常的问题,还可重建 DLL 注册库,恢复应用程序兼容性,解决部分软件无法正常运行的问题,同时也能处理如 Windows 沙箱无法启动、Windows 将 JPG 或 JPEG 保存为 JFIF 等系统问题。 系统工具维护:提供启动管理器、服务管理器和进程管理器等工具,用户可控制和管理启动程序、系统服务和当前运行的进程,提高系统的启动和运行速度,防止不必要的程序和服务占用系统资源。还能查看系统规格,如处理器线程数、最大显示分辨率等。 故障排除:集成超过 20 个微软官方诊断工具,可对系统问题进行专业排查,还能生成硬件健康状态报告。能解决搜索和索引故障、邮件和日历应用程序崩溃、设置应用程序无法启动等问题,也可处理打印机、网络适配器、Windows 更新等相关故障。 其他修复功能:可以重置组策略设置、catroot2 文件夹、记事本等多种系统设置和组件,如重置 Windows 应用商店缓存、Windows 防火墙设置等。还能添加重建图标缓存支持,恢复粘滞便笺删除
评论 58
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新绿MEHO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值