Spring webflux 反应 Mono::subscribe
Spring webflux reactive Mono::subscribe
问题陈述:
我试图在将请求转发到下游系统之前将会话保存在 redis 中。
return new OrderedGatewayFilter((exchange, chain) -> exchange.getSession().doOnNext(session -> {
// some code
}
}).map(WebSession::save).doOnNext(Mono::subscribe).then(chain.filter(exchange)), SAVE_SESSION_FILTER);
但是Mono::subscribe异步是天生的,不保证session先存到redis再转发到下游。我们在对并发请求进行性能测试时遇到了这个问题。
有什么方法可以同步吗
您可能正在寻找 flatMap
运算符,它使 subscribe
变得不必要并且在完成之前不会继续流程:
return new OrderedGatewayFilter((exchange, chain) ->
exchange.getSession()
.doOnNext(session -> {/* some code*/})
.flatMap(WebSession::save)
.then(chain.filter(exchange)), SAVE_SESSION_FILTER);
问题陈述:
我试图在将请求转发到下游系统之前将会话保存在 redis 中。
return new OrderedGatewayFilter((exchange, chain) -> exchange.getSession().doOnNext(session -> {
// some code
}
}).map(WebSession::save).doOnNext(Mono::subscribe).then(chain.filter(exchange)), SAVE_SESSION_FILTER);
但是Mono::subscribe异步是天生的,不保证session先存到redis再转发到下游。我们在对并发请求进行性能测试时遇到了这个问题。
有什么方法可以同步吗
您可能正在寻找 flatMap
运算符,它使 subscribe
变得不必要并且在完成之前不会继续流程:
return new OrderedGatewayFilter((exchange, chain) ->
exchange.getSession()
.doOnNext(session -> {/* some code*/})
.flatMap(WebSession::save)
.then(chain.filter(exchange)), SAVE_SESSION_FILTER);