zuul已经不在维护
简单介绍:
zuul 在springcloud刚推出时承担着api网关的作用,作为微服务架构中的服务提供了统一访问入口,客户端都是通过网关经行路由访问服务,而不是直接访问服务。网关有点类似于web开发中
的拦截器与过滤器,但又不同于拦截器与过滤器。它不仅能实现拦截器与过滤器的功能,还具有负载均衡、校验过滤、服务容错和服务聚合的功能。
(注:过滤器在进入service前执行,拦截器在dispartservlet之后controller之气执行)
gateway是目前较流行的路由网关,不仅具有zuul的功能特性,还提供了一些更加强大的功能特性。
特性:
①动态路由能够匹配任何请求属性
②可以对路由进行指定的断言(Predicate)和过滤器(filter)
③具有服务发现的功能
④请求限流功能与路径重写
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-gatewayartifactId>
<version>2.2.0.RELEASEversion>
dependency>
请将web依赖去除即可
spring:
application:
name: gateway
cloud:
gateway:
routes:
- id: target #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: http://localhost:11000
predicates:
- Path=/getRibbon/**, /success/**
@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();
}
}
经过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]
predicates:
- Path=/getRibbon/**, /success/**
- Cookie=username,zxf
predicates:
- Path=/getRibbon/**, /success/**
- Header=token,1234567890
predicates:
- Path=/getRibbon/**, /success/**
- Host=**.baidu.com
predicates:
- Path=/getRibbon/**, /success/**
- Method=GET
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.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-hystrixartifactId>
dependency>
- id: target #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: http://127.0.0.1:11000
filters:
- name: Hystrix
args:
name: fallbackcmd
fallbackUri: forward:/fallback
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redis-reactiveartifactId>
dependency>
<dependency>
<groupId>org.springframework.datagroupId>
<artifactId>spring-data-redisartifactId>
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