最近刚好在用这个,也找了很多,最佳实践是否需要根据自己的场景来呢?可能也有不足的地方,希望懂的大佬提出。
我这边需要对接不同厂家,每个厂家的服务会部署在多个机器上,以下是我的配置
这是 WebClient.Builder 以下配置根据自己情况修改
```java
@
Configuration@
EnableWebFlux@
Slf4jpublic class WebFluxConfig {
@
Bean public WebClient.Builder getWebClientBuilder() {
//配置固定大小连接池
ConnectionProvider connectionProvider = ConnectionProvider.create("DS-connection", 20);
//设置 ssl 信任客户端
SslContext sslContext = null;
try {
sslContext = SslContextBuilder.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE).build();
} catch (SSLException e) {
e.printStackTrace();
}
SslContext finalSslContext = sslContext;
HttpClient httpClient = HttpClient.create(connectionProvider).secure(t -> t.sslContext(finalSslContext))
.tcpConfiguration(tcpClient -> tcpClient.doOnConnect(conn ->
//读超时 30 秒
conn.handler(new ReadTimeoutHandler(30, TimeUnit.SECONDS))
//写超时 30 秒
.handler(new WriteTimeoutHandler(30, TimeUnit.SECONDS))
)
//连接超时 60 秒
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 60000)
.option(ChannelOption.TCP_NODELAY, true));
return WebClient.builder().clientConnector(new ReactorClientHttpConnector( httpClient));
}
}
```
不同的厂商 参数 如果是固定的 可以通过读取配置完成
```java
@
Componentpublic class Test {
@
Autowired private WebClient.Builder webClientBuilder;
/**
* @
param uri
* @
param parameter
* @
return */
public Mono<HashMap> get(String url, String token, String uri, Object... parameter) throws Exception {
return null;
}
/**
* @
param uri
* @
return */
public Mono<HashMap> get(String url, String token, String uri) throws Exception {
return null;
}
/**
* @
param uri
* @
param parameter
* @
return */
public Mono<HashMap> post(String url, String token, String uri, Object parameter) throws Exception {
return null;
}
}
```
异常我是抛出在同一个地方统一处理
最后我觉得 还是需要根据你的实际场景来,我也是第一次用这个,RestTemplate 就向上面说的没有新增加了,推荐使用 webclient ,所以才想尝试一下用的这个,项目主要还是 springmvc ,希望能帮助到你。