問題
java client長時間沒有連接es后,再次調(diào)用訪問接口,報錯連接超時
環(huán)境
以下方法實測在spring-data-elasticsearch 4.2.10
和spring-data-elasticsearch 3.2.12.RELEASE
環(huán)境下有效
解決
1、因為問題的原因是長時間沒有連接導致的,最直接、常見的解決方案就是定期的去調(diào)用連接es,以此保證連接不會中斷,這樣的操作我們稱之為?;畈呗?/code>
2、在RestClientBuilder
的回調(diào)函數(shù)中提供了一個setKeepAliveStrategy
方法,可以用來設(shè)置?;畈呗?/p>
RestClientBuilder builder = RestClient.builder(httpPostArr)
// 異步httpclient配置
.setHttpClientConfigCallback(httpClientBuilder -> {
// httpclient?;畈呗?/span>
httpClientBuilder.setKeepAliveStrategy(((response, context) -> Duration.ofMinutes(5).toMillis()));
return httpClientBuilder;
});
3、完整代碼:在ElasticRestClientConfig
配置類中聲明設(shè)置?;畈呗?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-512081.html
@Configuration
@EnableElasticsearchRepositories(basePackages = "com.example.estest")
public class ElasticRestClientConfig extends AbstractElasticsearchConfiguration {
@Value("${spring.elasticsearch.rest.uris}")
private String url;
@Value("${spring.elasticsearch.rest.username}")
private String username;
@Value("${spring.elasticsearch.rest.password}")
private String password;
@Override
@Bean
public RestHighLevelClient elasticsearchClient() {
url = url.replace("http://","");
String[] urlArr = url.split(",");
HttpHost[] httpPostArr = new HttpHost[urlArr.length];
for (int i = 0; i < urlArr.length; i++) {
HttpHost httpHost = new HttpHost(urlArr[i].split(":")[0].trim(),
Integer.parseInt(urlArr[i].split(":")[1].trim()), "http");
httpPostArr[i] = httpHost;
}
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(username,password));
RestClientBuilder builder = RestClient.builder(httpPostArr)
// 異步httpclient配置
.setHttpClientConfigCallback(httpClientBuilder -> {
// 賬號密碼登錄
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
// httpclient連接數(shù)配置
httpClientBuilder.setMaxConnTotal(30);
httpClientBuilder.setMaxConnPerRoute(10);
// httpclient保活策略
httpClientBuilder.setKeepAliveStrategy(((response, context) -> Duration.ofMinutes(5).toMillis()));
return httpClientBuilder;
});
return new RestHighLevelClient(builder);
}
}
4、再次啟動項目則不會出現(xiàn)連接超時報錯文章來源地址http://www.zghlxwxcb.cn/news/detail-512081.html
到了這里,關(guān)于spring data elasticsearch: 設(shè)置?;畈呗裕L時間不連接es,報錯超時連接的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!