SpringCloud入门之网关Gateway的使用


前言

Spring Cloud Gateway提供了一种简单而又有效的路由到API的方式,我们可以通过Gateway网关路由到后端服务,无需后端应用提供ip、域名等信息。


一、引入依赖

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

注意引入依赖的时候,要把spring-boot-starter-web依赖去掉,否则会报错。官方文档也有提示我们gateway的运行要求是spring boot提供Netty的运行环境,不能在传统的servlet容器或者打出来的war包中运行。
引入spring-boot-starter-web依赖的错误提示,如下:
在这里插入图片描述
官网给予我们的提示
在这里插入图片描述


二、谓词工厂(路由条件)

Spring Cloud Gateway的谓词,简单的理解就是路由的执行条件是什么,即if(谓词条件)为true了,就执行。

1.路由示例

代码如下(示例):

spring:
  application:
    name: springcloud-gateway
  cloud:
    gateway:
      routes:
        - id: backend-service
          uri: lb://backend-service
          predicates:
            - After=2024-03-03T12:11:50.861+08:00[Asia/Shanghai]
            - Path=/api/**,/user/query

A. 上边的配置的含义是:在2024年3月3号之后才可以访问backend-service服务的api所有接口以及user查询接口。
B. 谓词条件可以根据情况组合使用,也可以单独使用。
C. 通过网关访问服务时,ip和端口就可以使用网关的ip端口,api地址路径还是用后端服务的。
注意:After的时间得是上边的时区格式才行,可以用java的ZonedDateTime生成System.out.println(ZonedDateTime.now());

2.其他谓词

在predicates处修改相应的配置就可以实现不同条件形式的路由转发功能。

2.1 Before

request请求在时间配置的时间之前可以访问

predicates:
  - Before=2024-03-03T18:11:50.861+08:00[Asia/Shanghai]
  - Path=/api/**

2.2 Between

request请求在时间区间内可以访问

predicates:
  - Between=2024-03-03T18:11:50.861+08:00[Asia/Shanghai],2024-03-05T18:11:50.861+08:00[Asia/Shanghai]
  - Path=/api/**

2.4 Cookie

request请求匹配了缓存的键值对时可访问

predicates:
  - Cookie=user,zhangsan
  - Path=/api/**

2.5 Header

request请求的请求头header里有名为X-Request-Id且值是一个token时可访问

predicates:
  - Header=X-Request-Id,token随机字符串
  - Path=/api/**

2.6 Host

request请求中包含要求的主机时可访问

predicates:
  - Host=**.test.com,**.prod.com
  - Path=/api/**

2.7 Method

request请求中是POST或GET请求的可访问

predicates:
  - Method=POST,GET
  - Path=/api/**

2.8 Path

request请求中的uri地址是path中配置的可访问,见上边的示例。

2.9 Query

request请求中是含有查询参数时可访问

predicates:
  - Query=user
  - Path=/api/**

例如访问地址:http://127.0.0.1:8080/api/createUser?user=zs

2.10 RemoteAddr

是固定的ip地址的机器的request请求中可访问

predicates:
  - RemoteAddr=192.168.1.1/24
  - Path=/api/**

2.11 Weight

根据权重分配请求

spring:
  cloud:
    gateway:
      routes:
        - id: backend-service-vip
          uri: lb://backend-service
          predicates:
            - Weight=vip,8
            - Path=/api/**,/user/query1
        - id: backend-service-common
          uri: lb://backend-service
          predicates:
            - Weight=comm,2
            - Path=/api/**,/user/query2

总结

Gateway为我们提供了一种通过配置即可使用的网关,它满足了我们大部分日常的路由需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值