RestHighLevelClient初始化http参数的含义

这篇具有很好参考价值的文章主要介绍了RestHighLevelClient初始化http参数的含义。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 的值,以提高连接的复用率和性能。

实际生产中,一般使用SLB域名,此时一个业务进程(或Pod),会通过域名访问到多个IP(多个服务端节点),也就是会有多个路由,此时每个路由最大连接数由maxConnPerRoute控制,整个业务进程访问服务端的最大连接由 maxConnTotal 控制。文章来源地址https://www.toymoban.com/news/detail-522274.html

到了这里,关于RestHighLevelClient初始化http参数的含义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包