high-level-rest-client 初始化
一般初始化时需要设置验证信息、http相关参数;
@Bean
public RestHighLevelClient createClient(){
return new RestHighLevelClient(
RestClient.builder(new HttpHost("xxxxxxx.com", 80, HttpHost.DEFAULT_SCHEME_NAME))
.setRequestConfigCallback( builder->builder
//这几个timeout用户可以自己调整
.setConnectTimeout(1000)
.setSocketTimeout(1000)
.setConnectionRequestTimeout(1000)
)
.setHttpClientConfigCallback(
httpClientBuilder -> httpClientBuilder.setKeepAliveStrategy((httpRequest,httpResponse)-> 50000)
.setDefaultCredentialsProvider(getCredProvider())
)
);
}
private CredentialsProvider getCredProvider(){
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(
AuthScope.ANY, new UsernamePasswordCredentials("elastic", "xxxx"));
return credentialsProvider;
}
Http相关参数介绍
keepalive | keepalive用以维护长连接,长连接可以复用,但一定情况下需要中断长连接,如长连接长时间没有被使用的场景,需要中断长连接来节省资源。如上述ES客户端初始化案例中,则是设置了idle时间为50s,如果长连接50s依然是空闲状态,则长连接销毁。 |
connectTimeout | 默认值为1s。客户端发出请求时,需要从连接池获取获取一个可用连接。如果连接池内没有空闲连接,并且连接池内连接数没有达到最大连接数,那么客户端会创建一个新连接。ConnectTimeout就是与服务端建立连接的超时时间,如果在设定的 timeout 时间内未能成功连接到服务器,就会抛出 ConnectTimeoutException。 |
socketTimeout | 默认值为30s。每次在 Socket 上调用 write/read 的超时时间,一个请求周期内,可能会在 Socket 上进行多次 write/read,每次都重新计算超时时间。在请求完整地发到服务端后,客户端在Socket上第一次调用 read 方法,这一次的Socket Timeout也表示服务端处理业务的超时时间。如果请求或响应很大或者网络不好( 频繁丢包/重传 )时,客户端可能会调用 write/read 很多次,此时会出现实际调用时间远大于 Socket Timeout 时间的情况。 |
connectionRequestTimeout | 默认值为1s。客户端在发请求时,需要从连接池获取获取一个可用连接,如果连接池内连接数已达到最大值,此时需要等待一个空闲连接。ConnectionRequestTimeout就是从连接池获取一个connection的最大等待时间。如果在 timeout 时间内没有获取 connection,会抛出 ConnectionPoolTimeoutException。 |
maxConnPerRoute | 默认值为10。每个地址(路由)的最大连接数,并发请求数越大,每次请求花费时间越长,需要的连接数就要越大,避免为了获取连接进行长时间的等待。该值受到maxConnTotal的限制。 |
maxConnTotal | 默认值为30。连接池的最大连接数,并发请求数越大,每次请求花费时间越长,需要的连接数就要越大,避免为了获取连接进行长时间的等待。 |
maxConnPerRoute参数理解
maxConnPerRoute中对路由应该怎么理解?一个域名算一个路由,还是一个域名对应多个IP时每个IP都各算一个路由?
在 HttpClient 中,路由是指连接到特定主机和端口的连接。如果一个域名对应多个 IP 地址,那么每个 IP 地址都算一个路由。
在设置 maxConnPerRoute 参数时,需要根据实际情况来确定每个路由的最大连接数。如果应用程序需要频繁地连接到同一个主机和端口,那么可以适当增加 maxConnPerRoute 的值,以提高连接的复用率和性能。文章来源:https://www.toymoban.com/news/detail-522274.html
实际生产中,一般使用SLB域名,此时一个业务进程(或Pod),会通过域名访问到多个IP(多个服务端节点),也就是会有多个路由,此时每个路由最大连接数由maxConnPerRoute控制,整个业务进程访问服务端的最大连接由 maxConnTotal 控制。文章来源地址https://www.toymoban.com/news/detail-522274.html
到了这里,关于RestHighLevelClient初始化http参数的含义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!