spring cloud gateway 路由网关各种配置

spring cloud gateway: api网关

zuul已经不在维护
简单介绍:
    zuul 在springcloud刚推出时承担着api网关的作用,作为微服务架构中的服务提供了统一访问入口,客户端都是通过网关经行路由访问服务,而不是直接访问服务。网关有点类似于web开发中
的拦截器与过滤器,但又不同于拦截器与过滤器。它不仅能实现拦截器与过滤器的功能,还具有负载均衡、校验过滤、服务容错和服务聚合的功能。
(注:过滤器在进入service前执行,拦截器在dispartservlet之后controller之气执行)

目录

简介

    gateway是目前较流行的路由网关,不仅具有zuul的功能特性,还提供了一些更加强大的功能特性。
特性:
    ①动态路由能够匹配任何请求属性
    ②可以对路由进行指定的断言(Predicate)和过滤器(filter)
    ③具有服务发现的功能
    ④请求限流功能与路径重写

依赖

<dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-gateway</artifactId>
       <version>2.2.0.RELEASE</version>
</dependency>

启动时可能还会出现如下情况:
在这里插入图片描述

请将web依赖去除即可

配置路由

第一种方式yml文件配置方式

spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: target  #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://localhost:11000
          predicates:
            - Path=/getRibbon/**, /success/**

第二种Java bean配置方式

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator targetRouteLocator(RouteLocatorBuilder builder){
        return builder
                .routes().route("target", r -> r.path("/getRibbon/**", "/success/**")
                .uri("http://localhost:11000")).
                build();
    }
}

示例

原需要访问的url

在这里插入图片描述

配置gateway后访问的url

在这里插入图片描述

    经过gateway路由后可以访问到需要访问的接口。

各种路由设置

指定路径的请求会匹配

          predicates:
            - Path=/getRibbon/**, /success/**

指定时间后

          predicates:
            - Path=/getRibbon/**, /success/**
            - After=2020-10-08T16:30:00+08:00[Asia/Shanghai]

指定时间前

          predicates:
            - Path=/getRibbon/**, /success/**
            - Before=2020-10-08T16:30:00+08:00[Asia/Shanghai]

指定时间段内

          predicates:
            - Path=/getRibbon/**, /success/**
            - Between=2020-10-08T16:30:00+08:00[Asia/Shanghai],2020-10-09T16:30:00+08:00[Asia/Shanghai]

指定cookie的匹配

          predicates:
            - Path=/getRibbon/**, /success/**
            - Cookie=username,zxf

指定header的匹配

          predicates:
            - Path=/getRibbon/**, /success/**
            - Header=token,1234567890

指定host的匹配

          predicates:
            - Path=/getRibbon/**, /success/**
            - Host=**.baidu.com

指定method类型匹配

          predicates:
            - Path=/getRibbon/**, /success/**
            - Method=GET

指定method类型匹配

          predicates:
            - Path=/getRibbon/**, /success/**
            - Method=GET

指定查询参数的匹配

          predicates:
            - Path=/getRibbon/**, /success/**
            - Query=username

指定远程地址发起的请求的匹配

          predicates:
            - Path=/getRibbon/**, /success/**
            - RemoteAddr=192.168.190.128

权重路由

        - id: target1  #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://127.0.0.1:11000
          predicates:
            - Path=/getRibbon/**, /success/**
            - Weight=group1,6 #60%的请求路由到此路径下
        - id: target1  #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://127.0.0.1:12000
          predicates:
            - Path=/getRibbon/**, /success/**
            - Weight=group1,4 #40%的请求路由到此路径下

给请求添加参数过滤器

- id: target  #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://127.0.0.1:11000
          predicates:
            - Path=/getRibbon/**, /success/**
          filters:
            - AddRequestParameter=id,12121212 # 相当于给请求添加了一个参数名为id,值为12121212的请求参数

开启服务降级功能

引入服务容错依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
配置
- id: target  #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://127.0.0.1:11000
          filters:
            - name: Hystrix
              args:
                name: fallbackcmd
                fallbackUri: forward:/fallback

开启限流过滤器(RequestRateLimiter)功能

引入限流过滤器(RequestRateLimiter)依赖与redis依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
<dependency>
     <groupId>org.springframework.data</groupId>
     <artifactId>spring-data-redis</artifactId>
</dependency>
配置
routes:
        - id: target  #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://127.0.0.1:11000
          filters:
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 1 # 每秒允许处理的请求数量
                redis-rate-limiter.burstCapacity: 2 # 每秒最大处理的请求数量
                key-resolver: "#{@ipKeyResolver}" # 限流策略
          predicates:
            - Method=GET # 必须存在
      redis:
        host: 192.168.137.130
效果图示

多次对同一个接口进行请求,返回HTTP ERROR 429

在这里插入图片描述
控制台打印日志
在这里插入图片描述

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要基于Nacos实现Spring Cloud Gateway的动态网关路由,可以按照以下步骤进行操作: 1. 添加依赖:在Spring Cloud Gateway项目的pom.xml文件中添加相应的依赖,包括spring-cloud-starter-gatewayspring-cloud-starter-alibaba-nacos-discovery等。 2. 配置Nacos注册中心:在application.properties或application.yml配置文件中添加Nacos注册中心的相关配置,包括Nacos服务器地址、命名空间、分组等信息。 3. 配置动态路由:创建一个RouteLocator Bean,并在其中使用Nacos的服务发现来定义动态路由规则。可以通过Nacos的配置中心来管理路由规则的动态更新。 ```java @Configuration public class GatewayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("service_route", r -> r.path("/api/v1/**") .uri("lb://service-provider")) .build(); } } ``` 上述示例中,定义了一个名为service_route的路由规则,将请求路径以/api/v1/开头的请求转发到名为service-provider的微服务上。 4. 启动Gateway应用:启动Spring Cloud Gateway应用,它会自动从Nacos注册中心获取动态路由规则并进行路由转发。 5. 管理动态路由:使用Nacos的配置中心来管理动态路由规则。可以通过Nacos的控制台或API来添加、修改或删除路由规则,Gateway应用会自动更新并生效。 通过以上步骤,就可以基于Nacos实现Spring Cloud Gateway的动态网关路由了。你可以根据实际需求和业务场景,添加更多的路由规则和配置。希望对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值