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"

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论