`
Taylorshirley
  • 浏览: 10853 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

springcloud小程序商城 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 个值。
  • (企业架构源码可以加求球:三五三六二四七二五九)
分享到:
评论

相关推荐

    Springboot+SpringCloud微服务架构demo

    通过这个"Springboot+SpringCloud微服务架构demo",学习者可以了解微服务的基本架构和组件,理解如何使用Spring Boot和Spring Cloud来构建分布式系统,同时也能掌握Eureka、Gateway和Config等关键组件的用法。...

    SpringCloud面试题.pdf

    ### SpringCloud面试题知识点解析 #### 一、基本概念(1-20) **1. 解释微服务架构** 微服务架构是一种设计方法,通过将单一应用程序分解为一组小型服务来构建软件。每个服务独立运行并执行特定业务功能。这些服务...

    SpringCloud笔记

    - SpringBoot是SpringCloud的基础,而SpringCloud则是基于SpringBoot提供的高级服务治理工具。 通过以上介绍可以看出,微服务架构已经成为现代软件开发的重要趋势之一。SpringBoot和SpringCloud作为该领域的代表性...

    微服务:微服务_ Spring Boot和Spring Cloud和Eureka和GatewayAPI

    总的来说,微服务架构利用Spring Boot和Spring Cloud提供的工具,将复杂的应用程序拆分成小而独立的部分,便于开发、测试和维护。Eureka作为服务发现组件,确保服务间的通信,而Gateway则作为统一入口,提供路由和...

    基于springcloud的鲜花订购网微服务源码数据库.zip

    总结来说,"基于SpringCloud的鲜花订购网微服务源码数据库"是一个涵盖了SpringCloud微服务架构、微信小程序开发、Android应用开发以及数据库设计等多个重要领域的项目。通过学习和分析这个项目,开发者不仅可以提升...

    基于Spring Cloud搭建微服应用.pptx

    它提倡将单一应用程序划分为一组小的服务,每个服务都在自己的进程中运行,服务之间通过轻量级的方式(通常是HTTP RESTful API)进行通信。Spring Cloud作为微服务的主流框架,为开发者提供了构建分布式系统所需的...

    SpringCloud实战

    ### SpringCloud实战知识点详解 #### 一、SpringCloud与微服务架构 - **SpringCloud**:SpringCloud 是一套用于构建微...这不仅有助于开发者深入理解 SpringCloud 的工作原理,还能指导其实现具体的微服务应用案例。

    基于SpringBoot+SpringCloud+Mybatis主流框架搭建的分布式敏捷开发系统架构.zip

    SpringCloud基于SpringBoot进行构建,允许开发者轻松地在应用中实现云应用的各种经典模式,如Eureka用于服务注册与发现,Zuul或Gateway作为API网关,Hystrix作为断路器来防止服务雪崩,Ribbon和Feign进行客户端负载...

    毕业设计之SpringCloud-B2C电子商务平台服务端.zip

    《SpringCloud-B2C电子商务平台服务端》是一个典型的毕业设计项目,主要展示了如何利用SpringCloud框架构建一个完整的B2C电子商务系统的后端服务。这个项目不仅涵盖了基础的Web开发技术,还涉及到微服务架构、分布式...

    curso-microservices-spring-cloud:Java Spring Cloud中的微服务

    10. **智能路由**: Spring Cloud Gateway是Spring Cloud的下一代API网关,它提供了更高级的路由功能以及过滤器链的定义方式,能够更灵活地处理服务请求。 通过学习这些技术,开发者可以构建出高可用、可伸缩、故障...

    微服务所有组件的学习及实战

    "SpringCloud第2季 2020.3V1.6 讲师尚.emmx"这个文件名暗示了这可能是一堂关于Spring Cloud的高级课程,可能包含2020年3月更新的V1.6版本的新特性、优化和问题修复。讲师尚可能是该课程的主讲人,他可能具有丰富的...

    《Spring Boot2.0项目开发综合实训》指导手册v1.0

    手册会介绍如何利用Spring Cloud组件,如Eureka实现服务注册与发现,Zuul或Spring Cloud Gateway作为API网关,以及Ribbon和Hystrix进行客户端负载均衡和服务降级。 此外,Spring Boot在测试方面也非常出色,它内置...

    2020微服务项目实战

    首先,微服务架构是一种将单一应用程序拆分为一组小的服务的方法,每个服务运行在其自己的进程中,服务之间通过轻量级方式进行通信,通常采用HTTP RESTful API。这种架构模式允许团队独立地开发、部署和扩展各个服务...

    基于springboot车辆充电桩管理系统.zip

    在本系统中,Eureka用于服务注册与发现,Zuul或Spring Cloud Gateway作为API网关,Hystrix实现服务降级和熔断。 2.2 MyBatis MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。系统可能使用...

    微服务项目分布式基础(全栈开发篇)资料源码.zip

    - **Spring Cloud Gateway**:Spring的下一代API网关,提供了更高级的路由功能和过滤器。 3. **数据库设计**: - `gmall_数据库设计.pdb` 和 `gmall_数据库设计.pdm` 可能是数据库模型文件,展示了微服务项目中...

    Spring100题

    它涵盖了Spring框架的各个方面,包括核心概念、配置、AOP(面向切面编程)、数据访问、MVC(模型-视图-控制器)以及Spring Boot和Spring Cloud等相关内容。下面,我们将详细探讨这些关键知识点。 1. **Spring核心...

    Java超级详细的面试文档(335页)

    - **Spring Cloud**:深入学习Spring Cloud的服务发现、配置管理、熔断机制等组件,构建高可用的微服务架构。 #### 七、微服务架构 - **服务拆分策略**:理解如何根据业务领域进行服务拆分,避免服务间过度耦合。 -...

    Pro Spring Dynamic Modules for OSGi Service Platforms

    3. **高级主题**:包括但不限于如何在OSGi环境中使用Spring AOP、如何构建OSGi兼容的Spring MVC应用程序等。 #### 四、实际应用场景示例 1. **微服务架构下的服务注册与发现**:在一个典型的微服务架构中,服务间...

    从0开始学微服务

    1. **Spring Boot**:Spring Boot是Java开发中的一个框架,它简化了创建独立的、生产级别的基于Spring的应用程序。Spring Boot与Spring框架紧密集成,提供了自动配置、起步依赖和运行时健康检查等功能,使得开发...

    springboot031基于微服务框架的智慧商城平台.zip

    首先,SpringBoot是Spring框架的一个简化版,它极大地减少了传统Spring应用的配置工作,通过“约定优于配置”的原则,使得开发人员能够快速地搭建起应用程序。在智慧商城平台项目中,SpringBoot作为基础框架,负责...

Global site tag (gtag.js) - Google Analytics