成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Elasticsearch7.6解決報錯Connection reset by peer【刨根問底完美解決】

開發 前端
公司搭建的ElasticSearch,本來是用來提高檢索效率的,最近出現報錯了!解決完后立馬總結一下分享給大家。

一、前言

小編最近在生產上遇到一個問題,解決完后立馬總結一下分享給大家,希望可以幫助到大家哈!

事情是這樣的,奇怪的現象,公司搭建的ElasticSearch,本來是用來提高檢索效率的,最近出現報錯了!

版本配置什么都沒變,奇怪的很!

ElasticSearch版本為7.6

問題:每隔幾個小時就會查詢不到,與?ElasticSearch?連接不上,刷新后查詢正常報錯為:?java.io.IOException: Connection reset by peer

拿著條件去kibana是可以查詢到的;

核心原因:

這個客戶端是長鏈接,服務端過期后自動關閉鏈接,客戶端繼續用原來的鏈接導致錯誤的!

二、前因后果

下面我們來詳細說一下報錯原因和解決方案哈:

1、報錯信息

java.io.IOException: Connection reset by peer
at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:828)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:248)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:235)
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1514)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1484)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1454)
at org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:970)

2、原因與解決方案

上面也是說了原因,但是不太詳細,下面詳細說一下原因哈!

ES會設置一個策略來進行鏈接時間的控制,設置此連接的空閑持續時間!

我們可以看一下這個策略:

這個我們不配置會走這個策略,默認-1為長鏈接,可循環重復使用、

我們只需要把這個策略換成我們的即可

@Contract(threading = ThreadingBehavior.IMMUTABLE)
public class DefaultConnectionKeepAliveStrategy implements ConnectionKeepAliveStrategy {

public static final DefaultConnectionKeepAliveStrategy INSTANCE = new DefaultConnectionKeepAliveStrategy();

@Override
public long getKeepAliveDuration(final HttpResponse response, final HttpContext context) {
Args.notNull(response, "HTTP response");
final HeaderElementIterator it = new BasicHeaderElementIterator(
response.headerIterator(HTTP.CONN_KEEP_ALIVE));
while (it.hasNext()) {
final HeaderElement he = it.nextElement();
final String param = he.getName();
final String value = he.getValue();
if (value != null && param.equalsIgnoreCase("timeout")) {
try {
return Long.parseLong(value) * 1000;
} catch(final NumberFormatException ignore) {
}
}
}
return -1;
}

}

服務器的TCP時間,我們可以查看一下:

cat /proc/sys/net/ipv4/tcp_keepalive_time

圖片

這里就是12分鐘,我們需要讓客戶端的鏈接時間小于服務器的keepalive時間!

這樣客戶端超過時間后就會重新獲取新鏈接,確保不會報錯哈!!

三、具體方案

編寫ElasticsearchProperties ,獲取nacos上的信息,方便修改!

@Data
@Component
@ConfigurationProperties(prefix = "spring.elasticsearch.rest")
public class ElasticsearchProperties {

private String uris;

private String username;

private String password;

}

編寫RestHighLevelClient配置類,使用我們的策略,看到其他教學還是使用以前的連接方式,現在RestClientBuilder里的RestClientBuilder是自動構建連接的!

這里我們把RestClientBuilder注入,繼續放里面放新策略即可!

由于我們重寫RestHighLevelClient,它又依賴RestClientBuilder,原來RestClientBuilder會自動獲取用戶名密碼、連接地址,現在我們需要把用戶名密碼重新賦值一下哈!這樣就可以少一步輸入地址的哈!

這里設置10分鐘,沒有超過12分鐘!

@Configuration
public class ElasticsearchConfig {

@Autowired
private ElasticsearchProperties elasticsearchProperties;

@Autowired
private RestClientBuilder restClientBuilder;

@Bean
public RestHighLevelClient restHighLevelClient(){

CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticsearchProperties.getUsername(), elasticsearchProperties.getPassword()));
return new RestHighLevelClient(restClientBuilder.setHttpClientConfigCallback(requestConfig ->{
requestConfig.setKeepAliveStrategy((response, context) -> TimeUnit.MINUTES.toMillis(10));
requestConfig.setDefaultCredentialsProvider(credentialsProvider);
return requestConfig;
}));
}

}

看一下配置文件:

圖片

方案二:

如果不介意的話可以把錯誤捕獲起來,重新調用一下,第二次就會重新建立連接,這樣就不會有問題了,不過這種不太建議??!

責任編輯:姜華 來源: 小王博客基地
相關推薦

2019-07-04 10:49:13

HTTPWebSocket協議

2015-07-02 15:04:53

CSS好奇心+

2022-04-20 11:41:45

Kafka數據解決方案

2013-10-10 15:41:38

綠色數據中心數據中心

2012-09-07 09:23:01

Win 8操作系統

2010-03-22 16:51:31

無線網絡穩定性

2021-02-09 08:13:51

項目內存TCP

2020-11-13 07:14:55

Kafka消息中間件

2024-07-07 21:39:34

2019-08-09 11:25:01

Java虛擬機Java程序員

2022-12-06 09:10:56

KVC原理數據篩選

2020-04-09 13:38:40

MySQL數據庫臟讀

2022-04-07 07:31:30

CSSCSS Reset前端

2013-05-17 13:47:25

Android開發ScrollViewGridView

2011-05-05 10:32:54

激光打印機

2021-10-04 09:14:18

ElasticSear深度分頁

2009-12-08 10:00:50

windows 7黑屏

2021-02-23 10:34:51

Java 編程開發

2024-02-04 09:02:29

RocketMQ項目處理器

2009-06-10 22:13:55

JavaScriptExcel打印
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品国产一区二区三区不卡 | 欧美日韩大陆 | 亚洲第一视频网站 | 亚洲精品视频在线播放 | 男人天堂网av | 粉嫩一区二区三区四区公司1 | 久久机热 | 成人福利在线视频 | 欧美日韩看片 | 99久久国产综合精品麻豆 | 欧美日韩精品中文字幕 | 欧美高清视频一区 | 一区二区三区亚洲 | 久久亚洲免费 | 涩爱av一区二区三区 | 丝袜一区二区三区 | 精品国产一区二区在线 | 欧美片网站免费 | 欧美日韩中文在线 | 视频一区二区三区中文字幕 | 一区二区在线免费观看 | 久久久久国产精品人 | 久草院线 | 国产在线第一页 | 欧美日韩久久精品 | 精品久久久久久久人人人人传媒 | 97日日碰人人模人人澡分享吧 | 国内自拍偷拍一区 | 综合久久综合久久 | 国产精品免费一区二区三区四区 | 免费小视频在线观看 | 黄色毛片网站在线观看 | 久久国产精品首页 | 亚洲综合区 | 精品视频一区二区三区 | 久久成人免费 | 久久精品亚洲精品国产欧美kt∨ | 国产精品毛片久久久久久 | 欧美自拍日韩 | 在线播放中文 | 天堂一区二区三区 |