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


集群限流

https://www.imooc.com/article/290828

posted on 2020-02-29 11:43  清浊  阅读(323)  评论(0)    收藏  举报