admin管理员组文章数量:1633932
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
指定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
控制台打印日志
版权声明:本文标题:spring cloud gateway 路由网关各种配置 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1729177574a1188910.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论