Adi*_*a K 5 java spring-boot spring-webclient
目前,我的 post 和 get 请求是通过 WebClients 处理的,WebClients 在 Spring Boot 中具有公共连接和读取超时。我有 5 个不同的类,每个类都需要自己的一组连接和读取超时。我不想创建 5 个不同的 WebClient,而是使用相同的 Webclient,但在从特定类发送 post 或 get 请求时,指定所需的连接和读取超时。有没有办法实现这个?
我当前的网络客户端:
@Bean
public WebClient getWebClient(WebClient.Builder builder){
HttpClient httpClient = HttpClient.newConnection()
.tcpConfiguration(tcpClient -> {
tcpClient = tcpClient.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout*1000);
tcpClient = tcpClient.doOnConnected(conn -> conn
.addHandlerLast(new ReadTimeoutHandler(readTimeout, TimeUnit.SECONDS)));
return tcpClient;
}).wiretap(true);
ClientHttpConnector connector = new ReactorClientHttpConnector(httpClient);
return builder.clientConnector(connector).build();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的帖子请求:
public WebClientResponse httpPost(String endpoint, String requestData, Map<String, Object> requestHeader) {
ClientResponse res = webClient.post().uri(endpoint)
.body(BodyInserters.fromObject(requestData))
.headers(x -> {
if(requestHeader != null && !requestHeader.isEmpty()) {
for (String s : requestHeader.keySet()) {
x.set(s, String.valueOf(requestHeader.get(s)));
}
}
})
.exchange()
.doOnSuccess(x -> log.info("response code = " + x.statusCode()))
.block();
return convertWebClientResponse(res);
}
Run Code Online (Sandbox Code Playgroud)
您可以在 WebClient 中配置请求级别超时。
webClient.get()
.uri("https://baeldung.com/path")
.httpRequest(httpRequest -> {
HttpClientRequest reactorRequest = httpRequest.getNativeRequest();
reactorRequest.responseTimeout(Duration.ofSeconds(2));
});
Run Code Online (Sandbox Code Playgroud)
现在您可以做的是,根据请求,您可以从属性文件中添加这些值,也可以对它们进行硬编码。
参考:- https://www.baeldung.com/spring-webflux-timeout
| 归档时间: |
|
| 查看次数: |
18086 次 |
| 最近记录: |