如何配置OpenSearch RestHighLevelClient的读取超时?
配置OpenSearch RestHighLevelClient读取超时的方法
你可以通过两种方式配置读取超时(对应socket timeout),以下是具体实现:
方案一:请求级别超时配置(推荐)
通过RestClientBuilder的setRequestConfigCallback方法,针对每个请求设置超时参数,包括读取超时:
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password)); RestClientBuilder builder = RestClient.builder(new HttpHost(url, port, scheme)) .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)) // 配置请求超时参数 .setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder .setSocketTimeout(60000) // 读取超时,单位毫秒,示例设为60秒 .setConnectTimeout(30000) // 连接超时,可选配置 .setConnectionRequestTimeout(30000)); // 连接池获取连接超时,可选配置 return new RestHighLevelClient(builder);
方案二:客户端全局默认超时配置
通过HttpClientConfigCallback设置客户端级别的默认超时,所有请求会继承这个配置,若有请求级别的配置则会被覆盖:
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password)); RestClientBuilder builder = RestClient.builder(new HttpHost(url, port, scheme)) .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider) // 设置默认读取超时 .setDefaultSocketConfig(SocketConfig.custom() .setSoTimeout(60000) // 读取超时60秒 .build()) // 可选:设置默认连接超时 .setDefaultConnectionConfig(ConnectionConfig.custom() .setConnectTimeout(30000) .build())); return new RestHighLevelClient(builder);
关键说明
setSocketTimeout(方案一)或setSoTimeout(方案二)就是控制读取超时的参数,即客户端等待服务器返回响应数据的最长时间。- 两种方案可以配合使用,请求级别的配置优先级高于客户端全局默认配置。
内容的提问来源于stack exchange,提问作者Inconvenient9
相关产品推荐
相关产品推荐

