响应式通知
从版本 5.3 开始,对于生成Mono回复的请求消息处理器,可以使用ReactiveRequestHandlerAdvice。
必须为此建议提供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(),例如应用 响应式熔断器。