目录
0 前言
Gateway属于Springcloud自研的第二代微服务网关框架,Zuul属于netfix公司开源的产品,属于第一代微服务网关;
1 引入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
2 配置文件
server:
port: 80
####服务网关名称
spring:
application:
name: springcloudalibaba-gateway
cloud:
gateway:
discovery:
locator:
####开启以服务id去注册中心上获取转发地址
enabled: true
###路由策略
routes:
##路由id
- id: producer
#### 基于lb负载均衡形式转发(通过注册中心服务名称,获取真实访问地址)
uri: lb://springcloudalibaba-producer
filters:
- StripPrefix=1
###匹配规则
predicates:
- Path=/producer/**
nacos:
discovery:
server-addr: nacosIp地址:8848
### 127.0.0.1/producer/*** 转发到http://127.0.0.1:8080/***
3 访问测试
此时访问127.0.0.1/producer/getPort 则转发到springcloudalibaba-producer服务:127.0.0.1:8080/producer/getPort
4 案例:自定义TokenFilter实现参数拦截
@Component
public class TokenFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getQueryParams().getFirst("token");
if(token==null||token.isEmpty()){
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.BAD_GATEWAY);
String msg = "token not is null";
DataBuffer buffer = response.bufferFactory().wrap(msg.getBytes());
return response.writeWith(Mono.just(buffer));
}
return chain.filter(exchange);
}
}
访问:127.0.0.1:8080/producer/getPort
访问:127.0.0.1:8080/producer/getPort ?token="111"