我试图在将请求传递给下游之前为所有请求标头添加动态值。
我创建了一个用户定义的类来实现org.springframework.cloud.gateway.filter.GlobalFilter
在这个类中,我必须调用其他服务(2 个响应式 redis 和 1 个 api 调用)来检索需要在标题中设置的动态值。
这是我现在面临的问题,
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
return chain.filter(exchange);
}
GatewayFilterChain.filter(exchange) 订阅在其他单声道订阅(2 个 redis 和 1 个服务)完成之前完成。因此,在我改变交换之前,不添加标头的请求将传递到下游。
exchange.getRequest().mutate()
.header(HttpHeaders.AUTHORIZATION, "Bearer ".concat(token))
.build()
为了避免这个问题,我添加了单声道订阅的延迟
chain.filter(exchange).delaySubscription(Duration.ofMillis(300L))
但是我不想在系统中引入手动延迟,请您指导/建议我更好的解决方案,以便在其他单声道订阅完成之前不会订阅 GatewayFilterChain。