响应式通知

从 5.3 版本开始,ReactiveRequestHandlerAdvice 可用于生成 Mono 响应的请求消息处理器。需要为该通知提供一个 BiFunction<Message<?>, Mono<?>, Publisher<?>>,它会在被拦截的 handleRequestMessage() 方法实现生成的响应上由 Mono.transform() 运算符调用。通常,当需要通过 timeout()retry() 等支持运算符来控制网络波动时,这种对 Mono 的自定义是必要的。例如,在使用 WebFlux 客户端发送 HTTP 请求时,我们可以使用以下配置,使等待响应的时间不超过 5 秒:

.handle(WebFlux.outboundGateway("https://somehost/"),
                       e -> e.customizeMonoReply((message, mono) -> mono.timeout(Duration.ofSeconds(5))));

参数 message 是消息处理器的请求消息,可用于确定请求作用域属性。参数 mono 是此消息处理器的 handleRequestMessage() 方法实现的返回结果。从此函数中也可以嵌套调用 Mono.transform(),例如用于应用 响应式熔断器