这篇文章我们将继续介绍 Filter 的一些高级功能。
- 熔断
- 限流
- 重试
1. 限速路由器
限速在高并发场景中比较常用的手段之一,可以有效的保障服务的整体稳定性,Spring Cloud Gateway 提供了基于 Redis 的限流方案。所以我们首先需要添加对应的依赖包spring-boot-starter-data-redis-reactiv
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId> </dependency>
配置文件中需要添加 Redis 地址和限流的相关配置
server: port: 8080 spring: application: name: spring-cloud-gateway redis: host: localhost password: password port: 6379 cloud: gateway: discovery: locator: enabled: true routes: - id: requestratelimiter_route uri: http://example.org filters: - name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 10 redis-rate-limiter.burstCapacity: 20 key-resolver: "#{@userKeyResolver}" predicates: - Method=GET
- filter 名称必须是 RequestRateLimiter
- redis-rate-limiter.replenishRate:允许用户每秒处理多少个请求
- redis-rate-limiter.burstCapacity:令牌桶的容量,允许在一秒钟内完成的最大请求数
- key-resolver:使用 SpEL 按名称引用 bean
项目中设置限流的策略,创建 Config 类。(了解源码可+求求: 1791743380)
package com.springcloud.gateway.config; import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import reactor.core.publisher.Mono; /** * Created with IntelliJ IDEA. * * @Date: 2019/7/11 * @Time: 23:45 * @email: inwsy@hotmail.com * Description: */ @Configuration public class Config { @Bean KeyResolver userKeyResolver() { return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("user")); } }
Config类需要加@Configuration注解。
根据请求参数中的 user 字段来限流,也可以设置根据请求 IP 地址来限流,设置如下:
@Bean public KeyResolver ipKeyResolver() { return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName()); }
这样网关就可以根据不同策略来对请求进行限流了。
2. 熔断路由器
在之前的 Spring Cloud 系列文章中,大家对熔断应该有了一定的了解。
Spring Cloud Gateway 也可以利用 Hystrix 的熔断特性,在流量过大时进行服务降级,同样我们还是首先给项目添加上依赖。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
配置示例
spring: cloud: gateway: routes: - id: hystrix_route uri: http://example.org filters: - Hystrix=myCommandName
配置后,gateway 将使用 myCommandName 作为名称生成 HystrixCommand 对象来进行熔断管理。如果想添加熔断后的回调内容,需要在添加一些配置。
spring: cloud: gateway: routes: - id: hystrix_route uri: lb://spring-cloud-producer predicates: - Path=/consumingserviceendpoint filters: - name: Hystrix args: name: fallbackcmd fallbackUri: forward:/incaseoffailureusethis
fallbackUri: forward:/incaseoffailureusethis配置了 fallback 时要会调的路径,当调用 Hystrix 的 fallback 被调用时,请求将转发到/incaseoffailureuset这个 URI。
3. 重试路由器
RetryGatewayFilter 是 Spring Cloud Gateway 对请求重试提供的一个 GatewayFilter Factory。
配置示例
spring: cloud: gateway: routes: - id: retry_test uri: lb://spring-cloud-producer predicates: - Path=/retry filters: - name: Retry args: retries: 3 statuses: BAD_GATEWAY
Retry GatewayFilter 通过这四个参数来控制重试机制: retries, statuses, methods, 和 series。
- retries:重试次数,默认值是 3 次
- statuses:HTTP 的状态返回码,取值请参考:org.springframework.http.HttpStatus
- methods:指定哪些方法的请求需要进行重试逻辑,默认值是 GET 方法,取值参考:org.springframework.http.HttpMethod
- series:一些列的状态码配置,取值参考:org.springframework.http.HttpStatus.Series。符合的某段状态码才会进行重试逻辑,默认值是 SERVER_ERROR,值是 5,也就是 5XX(5 开头的状态码),共有5 个值。
相关推荐
史上最简单的SpringCloud教程 | 第十四篇: Spring Cloud Gateway初体验 史上最简单的SpringCloud教程 | 第十五篇: Spring Cloud Gateway 之Predict篇 史上最简单的SpringCloud教程 | 第十六篇: Spring Cloud Gateway...
Spring Cloud系列教程 | 第十一篇:Spring Boot Spring Cloud Stream 和 Kafka案例教程-附件资源
Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具包,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)...
在本教程中,我们将深入探讨Spring Cloud的基础概念,并专注于如何创建一个服务消费者,利用RESTful API和Ribbon组件。Spring Cloud是微服务架构中的一个重要工具集,它简化了配置和服务发现,使得开发者能够轻松地...
最后,书中会探讨Spring Cloud的高级话题,如Spring Cloud Stream和Spring Cloud Task,它们分别用于构建消息驱动的应用和执行一次性任务。此外,还会介绍如何将Spring Cloud与Docker、Kubernetes等容器化技术结合,...
本基础教程旨在帮助初学者全面理解并掌握SpringCloud的核心概念和技术,通过实践源码与配套文档,深入学习其工作原理和应用方式。 首先,我们需要了解SpringCloud的基础架构,它由多个子项目组成,如Eureka(服务...
springCloud 高级教程 没加密 没加密 springCloud 高级教程 没加密 没加密 springCloud 高级教程 没加密 没加密 springCloud 高级教程 没加密 没加密 springCloud 高级教程 没加密 没加密 springCloud 高级教程 没...
在IT行业中,Spring Cloud Gateway作为Spring Cloud生态体系中的一个关键组件,被广泛用于构建微服务架构中的API网关。这个框架允许我们集中处理各种请求,包括路由、过滤、安全等,极大地简化了服务间的通信。而...
标签:cloud、spring、server、springframework、gateway、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变...
总之,Spring Cloud Gateway是构建现代云原生应用的重要工具,它提供了高效、可扩展的API管理和路由策略,同时利用了Spring生态的优势,如Spring Boot的自动化配置和Spring WebFlux的反应式编程模型。在理解和使用...
在构建分布式系统时,Spring Cloud Gateway 作为微服务架构中的边缘服务或 API 网关,扮演着至关重要的角色。它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java ...
标签:cloud、spring、server、springframework、gateway、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...
在Spring Cloud生态体系中,Spring Cloud Gateway作为新一代的API网关,被广泛应用于微服务架构中,用于统一处理请求路由、过滤器链、限流、熔断等核心功能。本篇将详细介绍Spring Cloud Gateway的配置文件相关知识...
spring cloud高级教程 微服务实战 spring cloud高级教程 微服务实战 spring cloud高级教程 微服务实战
Spring Cloud Eureka、Spring Cloud Gateway和Spring Cloud Zipkin是微服务架构中常用的一组组件,它们各自在分布式系统中承担着不同的角色。本项目通过Maven进行构建,旨在实现一个完整的微服务治理和监控解决方案...
Spring Cloud Zookeeper Gateway 是一个基于Spring Cloud生态系统的项目,它结合了Zookeeper作为微服务注册中心和Spring Cloud Gateway作为服务网关的解决方案。这个项目旨在为开发者提供一个快速搭建微服务架构的...
SpringCloud Gateway作为一款现代化的微服务网关,它在企业级分布式系统中扮演着至关重要的角色。这个名为"springcloud Gateway网关-压测用.zip"的压缩包包含了一个用于性能测试的配置,目的是评估和优化Gateway的...