spring cloud gateway
spring cloud gateway未来第二代网关,基于Netty,Reactor以及WefFlux构建
性能zuul的1.6倍,功能强大内置了很多实用功能,比如转发,监控,限流等。不是Servlet编程模型,有一定的适应成本,不在Servlet容器下工作,不能打成war包,不支持springboot1.XX
使用gateway
1、添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、写注解
3、写配置
spring:
application:
name: gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
namespace: cf734626-9b65-411f-a77a-1fc14869fd05
gateway:
discovery:
locator:
enabled: true
server:
port: 8088
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always
核心概念
Route
Spring cloud gateway的基础元素,可简单的理解成一条转发规则,包含ID,目标URL,Predicate集合以及Filter集合
Predicate
即java.util.function.Predicate,Spring Cloud Gateway使用Predicate实现路由的条件
Filter
修改请求及相应
路由配置详解参见
https://www.imooc.com/article/290804
自定义谓词工厂
package com.fj.xiaofeiyang.gateway.predicate;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.web.server.ServerWebExchange;
import java.time.LocalTime;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
/**
* @author: yangchun
* @description:
* @date: Created in 2020-02-29 9:57
*/
public class TimeBetweenPredicateFactory extends AbstractRoutePredicateFactory<TimeBetweenConfig> {
public TimeBetweenPredicateFactory() {
super(TimeBetweenConfig.class);
}
@Override
public List<String> shortcutFieldOrder() {
return Arrays.asList("start","end");
}
@Override
public Predicate<ServerWebExchange> apply(TimeBetweenConfig config) {
LocalTime start = config.getStart();
LocalTime end = config.getEnd();
return serverWebExchange -> {
LocalTime now = LocalTime.now();
return now.isAfter(start)&&now.isBefore(end);
};
}
}
配置
spring:
application:
name: gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
namespace: cf734626-9b65-411f-a77a-1fc14869fd05
gateway:
discovery:
locator:
enabled: true
routes:
- id: after_route
uri: lb://pay
predicates:
- After=2030-01-20T17:42:47.789-07:00[America/Denver]
- TimeBetween=9:00,17:00
过滤器工厂详情解析,功能可以添加请求头
https://www.imooc.com/article/290816
自定义过滤器工厂生命周期pre转发前,post就是转发后
自定义过滤器工厂
继承:AbstractGatewayFilterFactory
参考示例:org.springframework.cloud.gateway.filter.factory.RequestSizeGatewayFilterFactory
配置形式
gateway:
discovery:
locator:
enabled: true
routes:
- id: after_route
uri: lb://pay
predicates:
- After=2030-01-20T17:42:47.789-07:00[America/Denver]
- TimeBetween=9:00,17:00
filters:
- name: RequestSize
args:
maxSize: 5000000
继承:AbstractNameValueGatewayFilterFactory
参考示例:org.springframework.cloud.gateway.filter.factory.AddRequestHeaderGatewayFilterFactory
配置
gateway:
discovery:
locator:
enabled: true
routes:
- id: after_route
uri: lb://pay
predicates:
- After=2030-01-20T17:42:47.789-07:00[America/Denver]
- TimeBetween=9:00,17:00
filters:
- AddRequestHeader=X-Request-Foo, Bar
自定义过滤器工厂-核心API
exchange.getRequest().mutate().xxx修改request
exchange.mutate().xxx修改exchange
chain.filter(exchange)传递给下一个过滤器
exchange.getResponse()
过滤器工厂详情解析,功能可以添加请求头
https://www.imooc.com/article/290821
Spring cloud gateway actuator监控
https://www.imooc.com/article/290822
Spring cloud gateway 问题排错
https://www.imooc.com/article/290824
集群限流
浙公网安备 33010602011771号