使用SpringCloudGateway做网关,实现了GlobalFilter接口,增加了服务A,通过网关POST请求A服务接口,参数使用Body传输时,Filter中方法执行了两次
相关代码
自定义Filter
@Component
public class TestFilter implements GlobalFilter, Ordered {
private Logger logger = LoggerFactory.getLogger(TestFilter.class);
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
logger.info("================ 进入了 TestFilter ==========");
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 1;
}
}
nacos配置
spring:
cloud:
gateway:
routes:
# service config
- id: user-service
uri: lb://user-service
predicates:
- Path=/**
filters:
- name: Retry
args:
retries: 3
# statuses: BAD_GATEWAY
methods: GET
series: SERVER_ERROR
backoff:
firstBackoff: 50ms
maxBackoff: 300ms
factor: 2
basedOnPreviousValue: false
- name: Hystrix
args:
name: fallbackcmd
fallbackUri: forward:/fallback
我尝试把配置或其他代码注释掉,还是会调用两次。这个情况在get或post请求(RequestBody方式)传参时都会出现这个问题。
问题解决了,是gateway版本问题,升级版本后就没问题了。
修改后:
Spring-Boot:2.2.0.RELEASE
Spring-Cloud:Hoxton.M3
Spring-Gateway:2.2.0.M3
其他
Spring-Gateway:2.2.0.M3这个版本阿里云私服是没有的
在POM文件中增加了以下配置就可以了,或者直接修改Maven的Settings.xml文件