1、官方文檔
Timeouts | Java REST Client [7.12] | Elastic
30,000 milliseconds timeout on connection http-outgoing-0
我們使用es的相關(guān)client查詢es時(shí)常會發(fā)現(xiàn)此報(bào)錯,大概也知道是因?yàn)椴僮鲿r(shí)間過長達(dá)到某個默認(rèn)閾值30s才返回的報(bào)錯,那么如何解決呢?
2、改變單次請求Timeout30秒的配置
原本我們使用RestHighLevelClient操作es查詢的時(shí)候,只顧構(gòu)造SearchSourceBuilder,RequestOptions相關(guān)配置沒有用,全部是默認(rèn)配置。如下
response = restClient.search(searchRequest, RequestOptions.DEFAULT);
實(shí)際上,30秒超時(shí)配置默認(rèn)就在這RequestConfig中的SocketTimeout。如下是自定義單次請求的超時(shí)時(shí)間(其中es默認(rèn)connentTimeout是1s,socketTimeout是30s)
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(60000)
.build();
RequestOptions options = RequestOptions.DEFAULT.toBuilder()
.setRequestConfig(requestConfig)
.build();
SearchResponse response = restClient.search(searchRequest, options);
3、容易混淆的SearchSourceBuilder中timeout概念
這里是我在尋找超時(shí)問題解決方案中發(fā)現(xiàn)的配置,測試中發(fā)現(xiàn)不對勁,因?yàn)樵O(shè)置timeout后,不管多大數(shù)據(jù)量都不會報(bào)超時(shí)錯誤了,仔細(xì)探究才發(fā)現(xiàn),這是一個近乎相反的概念,他保證的是數(shù)據(jù)能正常返回,但不保證數(shù)據(jù)正確,它假設(shè)設(shè)定為20ms,那么它有可能查詢過程小于20ms,那返回就是全部數(shù)據(jù);若是查詢過程大于20ms,到達(dá)20ms這個節(jié)點(diǎn)時(shí),它會立刻返回此0-20ms范圍內(nèi)的數(shù)據(jù),也就是說它返回的數(shù)據(jù)可能不完整。文章來源:http://www.zghlxwxcb.cn/news/detail-506209.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-506209.html
到了這里,關(guān)于es如何解決timeout超時(shí)30秒問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!