响应式建议
从版本 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() 来应用,例如 Reactive Circuit Breaker。