`
valiant025
  • 浏览: 17044 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Spring Cloud Gateway高级应用

 
阅读更多
  • 熔断
  • 限流
  • 重试

1. 限速路由器

限速在高并发场景中比较常用的手段之一,可以有效的保障服务的整体稳定性,Spring Cloud Gateway 提供了基于 Redis 的限流方案。所以我们首先需要添加对应的依赖包spring-boot-starter-data-redis-reactive(企业架构源码可以加求球:三五三六二四七二五九)

<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 类。

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 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 Gateway网关-压测用.zip

    SpringCloud Gateway作为一款现代化的微服务网关,它在企业级分布式系统中扮演着至关重要的角色。这个名为"springcloud Gateway网关-压测用.zip"的压缩包包含了一个用于性能测试的配置,目的是评估和优化Gateway的...

    最新Spring Cloud Gateway 官方参考指南-中文版-3.x

    总之,Spring Cloud Gateway是构建现代云原生应用的重要工具,它提供了高效、可扩展的API管理和路由策略,同时利用了Spring生态的优势,如Spring Boot的自动化配置和Spring WebFlux的反应式编程模型。在理解和使用...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    在构建分布式系统时,Spring Cloud Gateway 作为微服务架构中的边缘服务或 API 网关,扮演着至关重要的角色。它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java ...

    Spring Cloud Gateway的全局异常处理

    然而,在实际应用过程中,开发者会发现Spring Cloud Gateway默认的异常处理机制并不完善,尤其是对于RESTful API而言,默认情况下返回的是HTML格式的错误页面,这显然不符合前后端分离的应用场景。因此,本文将详细...

    springcloud gateway 全局过滤器统一签名判定.doc

    在Spring Cloud Gateway中,全局过滤器(Global Filter)是一种强大的机制,用于在请求路由到具体的服务之前或之后执行通用的处理逻辑。在这个场景中,我们关注的是如何利用全局过滤器来实现统一的签名验证,这在...

    springcloud下通过gateway转发websocket

    在IT行业中,Spring Cloud Gateway作为Spring Cloud生态...结合Spring Cloud Gateway的路由和过滤器功能,不仅可以方便地转发WebSocket请求,还可以在请求处理过程中实现各种高级功能,提高系统的灵活性和可扩展性。

    spring cloud gateway配置Hystrix 熔断、限流、后台调用注意点.pdf

    Spring Cloud Gateway 配置 Hystrix 熔断、限流、后台调用注意点 Spring Cloud Gateway 是一种基于 Spring Boot 框架的 API 网关解决方案,提供了许多实用的功能来管理和保护微服务架构中的 API。其中,Hystrix ...

    spring cloud gateway 例子

    标题中的“spring cloud gateway 例子”意味着我们将探讨如何使用Spring Cloud Gateway构建一个实际的应用示例。这个示例可能包括设置路由规则、自定义过滤器以及与其他Spring Cloud服务(如Eureka或Consul)的集成...

    Spring Cloud Gateway 2.1 使用手册中文版.pdf

    这个项目提供了一个构建在 Spring 生态系统之上的 API 网关,包括:Spring 5,Spring ... Spring Cloud Gateway 旨在提供一种简单而有效的 API 路 由方式,并为其提供横切关注点,例如:安全,监控/指标和弹性。

    Spring Cloud Eureka + Spring Cloud Gateway + Spring Cloud Zipkin

    项目中包含的SpringCloud中文文档将为开发者提供详细的指导,帮助他们理解和使用这些组件。文档通常会涵盖安装配置、基本使用、高级特性以及最佳实践等内容,是学习和实施微服务架构的重要参考资料。 总之,Spring ...

    SpringCloudGateway2.1使用手册中文版.rar

    在使用 SpringCloudGateway2.1 使用手册中文版时,你可以找到关于如何配置路由、使用过滤器、集成服务发现、安全设置等方面的详细指导。手册中应该会包含以下内容: 1. **快速入门**:介绍如何创建基本的 Spring ...

    spring cloud zookeeper gateway

    Spring Cloud Zookeeper Gateway 是一个基于Spring Cloud生态系统的项目,它结合了Zookeeper作为微服务注册中心和Spring Cloud Gateway作为服务网关的解决方案。这个项目旨在为开发者提供一个快速搭建微服务架构的...

    详解SpringCloud Finchley Gateway 统一异常处理

    详解 SpringCloud Finchley Gateway 统一异常处理 SpringCloud Finchley Gateway 统一异常处理是指在使用 SpringCloud Finchley 版本的 Gateway 时,如何统一处理系统级异常的方法。默认情况下,SpringCloud ...

    CVE-2022-22947-Spring-Cloud-Gateway 内存马POC

    Spring官方博客发布了一篇关于Spring Cloud Gateway的CVE报告,据公告描述,当启用和暴露 Gateway Actuator 端点时,使用 Spring Cloud Gateway 的应用程序可受到代码注入攻击。攻击者可以发送特制的恶意请求,从而...

    spring-cloud-gateway-demo.zip

    此外,Spring Cloud Gateway 提供了丰富的过滤器,比如 SecurityFilter、RateLimiterFilter 等,可以根据需求定制,实现如认证、限流、熔断等高级功能。在 "spring-cloud-gateway-demo" 中,你可能会看到这些过滤器...

    基于Nacos实现Spring Cloud Gateway实现动态路由的方法示例

    在现代微服务架构中,Spring Cloud Gateway作为一款强大的API网关,被广泛应用于服务路由、熔断、限流等场景。而Nacos作为阿里巴巴提供的一个分布式服务治理平台,提供了服务注册与发现、配置管理等功能。将Nacos与...

    spring cloud gateway跨域实现

    对于前后端分离的应用,我们需要在Spring Cloud Gateway中配置CORS策略来允许跨域请求。这可以通过创建一个配置类实现。下面是一个简单的示例,展示了如何配置允许所有源的跨域请求: ```java @Configuration ...

    springcloud gateway

    Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Spring Boot 2 构建的微服务网关,它是 Spring Cloud 生态系统中的重要组件,旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。它作为一个高可...

    SpringCloud.03.网关Gateway 配置文件

    在Spring Cloud生态体系中,Spring Cloud Gateway作为新一代的API网关,被广泛应用于微服务架构中,用于统一处理请求路由、过滤器链、限流、熔断等核心功能。本篇将详细介绍Spring Cloud Gateway的配置文件相关知识...

    spring-cloud-gateway-server-3.1.1-API文档-中文版.zip

    赠送jar包:spring-cloud-gateway-server-3.1.1.jar; 赠送原API文档:spring-cloud-gateway-server-3.1.1-javadoc.jar; 赠送源代码:spring-cloud-gateway-server-3.1.1-sources.jar; 赠送Maven依赖信息文件:...

Global site tag (gtag.js) - Google Analytics