Reactive Advice

从 5.3 版本开始,可以将 ReactiveRequestHandlerAdvice 用于产生 Mono 回复的请求消息处理程序。必须为此 advice 提供 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(),以应用例如 Reactive Circuit Breaker