简介
同zuul一样,为网关组件,zuul已停更,建议使用gateway代替之;
参考文章:
SpringCloud极简入门>网关#zuul
实战
1、创建《gateway》模块
1.1、pom依赖
<dependencies>
<!--gateaway依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
1.2、yml配置
server:
port: 8063
eureka:
client:
service-url:
defaultZone: http://localhost:7000/eureka/
#配好后访问http://localhost:8063/account就能获取server-account服务的数据
spring:
application:
name: gateway
cloud:
gateway:
#网关路由
routes:
#服务
- id: server-account
#提供服务的路由地址=>静态|动态
#uri: http://localhost:7101
#动态从eureka服务中心获取服务
uri: lb://SERVER-ACCOUNT
#断言条件
predicates:
#路径匹配
- Path=/**
#请求方法
- Method=GET
filters:
#添加请求头h1=h2
- AddRequestHeader=h1,h2
#添加请求参数p1=p2
- AddRequestParameter=p1,p2
1.3、application声明eureka client注解
1.4、测试访问http://localhost:8063/account
1.5、可以配置全局过滤器GlobalFilter,参考示例
@Component
public class CustomGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("进入" + CustomGlobalFilter.class.getSimpleName());
String p1 = exchange.getRequest().getQueryParams().getFirst("p1");
String p2 = exchange.getRequest().getQueryParams().getFirst("p2");
System.out.println("p1:" + p1 + ", p2:" + p2);
if (p1 == null) {
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;//过滤器的顺序,数值越小越先执行
}
}