【发布时间】:2020-04-23 20:53:54
【问题描述】:
我正在使用 spring-webflux 5.1.7-RELEASE。我想在发送请求之前触发 webclient 的回调。代码如下:
ExchangeFilterFunction logRequest (SomeLogObject someLogObject) {
return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
/**
business logic for callback goes here
*/
return Mono.just(clientRequest);
});
}
//code for plugging in logRequest callback (at some othe place)
WebClient webClient = WebClient
.builder()
.clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient)))
.baseUrl(baseURL)
.filters(exchangeFilterFunctions -> exchangeFilterFunctions.add(logRequest(someLogObject)))
.build();
webClient
.get()
.uri(uriBuilder -> uriBuilder.path("some_uri_path").queryParams(queryParam).build())
.header("some_header_key", "some_header_value")
.retrieve().bodyToMono(String.class);
这里 logRequest 是在开始时触发的(远在触发请求之前)。根据我的调试,我发现它在调用retrieve() 时被触发。
有没有办法确保在发送请求之前立即触发 logRequest,而不是在创建单声道时触发?
提前致谢
【问题讨论】:
-
你能给个完整的minimal reproducible example吗?我希望
logRequest()会立即被调用,但我希望您标记的“回调业务逻辑”在发出请求时执行,而不是在创建单声道时执行。 -
@MichaelBerry 你是对的 logRequest() 被立即调用。但是在调用retrieve() 方法时也会调用业务逻辑。我想将它延迟到请求执行之前。业务逻辑是一个日志语句。它记录请求开始执行时的时间戳,例如log.info("开始时间是",currtimeinmillis)
-
我真的不明白你想做什么
标签: spring-webflux project-reactor