Spring webflux 请求回调不工作
Spring webflux request callback not working
我正在使用 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,而不是在创建单声道时触发?
提前致谢
我认为您正在寻找以下更改:
ExchangeFilterFunction logRequest (SomeLogObject someLogObject){
return ExchangeFilterFunction.ofRequestProcessor(clientRequest ->
Mono.defer(() -> {
/**
business logic for callback goes here
*/
return Mono.just(clientRequest);
})
);
}
Mono.defer()
将延迟代码执行,直到真正的请求。
我正在使用 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,而不是在创建单声道时触发?
提前致谢
我认为您正在寻找以下更改:
ExchangeFilterFunction logRequest (SomeLogObject someLogObject){
return ExchangeFilterFunction.ofRequestProcessor(clientRequest ->
Mono.defer(() -> {
/**
business logic for callback goes here
*/
return Mono.just(clientRequest);
})
);
}
Mono.defer()
将延迟代码执行,直到真正的请求。