ElasticSearch SocketTimeoutException解决

ElasticSearch SocketTimeoutException解决ES 用了目前最新的版本 测试环境一直没有发现问题 一到生产就出现了 SocketTimeou 异常 而且很诡异 不是一直报 而是隔一段时间就报一下 谷歌了很久没有找到原因 最后加了一个配置后 就没有再报了 ES 版本如下 dependency groupId org springframew data groupId artifactId spring data elasticsearc artifactId dependency

ES用了目前最新的版本,测试环境一直没有发现问题,一到生产就出现了SocketTimeoutException异常,而且很诡异,不是一直报,而是隔一段时间就报一下,谷歌了很久没有找到原因,最后加了一个配置后,就没有再报了

ES版本如下

 
   
   
     org.springframework.data 
    
   
     spring-data-elasticsearch 
    
   
     4.2.6 
    
   对应ES版本 
   
   
     org.elasticsearch 
    
   
     elasticsearch 
    
   
     7.12.1 
    
  

异常如下 

Caused by: java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection http-outgoing-19 [ACTIVE] at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:865) at org.elasticsearch.client.RestClient.performRequest(RestClient.java:283) at org.elasticsearch.client.RestClient.performRequest(RestClient.java:286) at org.elasticsearch.client.RestClient.performRequest(RestClient.java:270) at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1654) at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1624) at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1594) at org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:1110) at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.lambda$searchScrollStart$12(ElasticsearchRestTemplate.java:311) at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.execute(ElasticsearchRestTemplate.java:383)

ElasticSearch SocketTimeoutException解决

解决方法如下:

import org.apache.http.HttpResponse; import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy; import org.apache.http.protocol.HttpContext; import org.elasticsearch.client.RestClientBuilder; import org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; @Component public class MyRestClientBuilderCustomizer implements RestClientBuilderCustomizer { @Override public void customize(RestClientBuilder builder) { // keep alive策略 builder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setKeepAliveStrategy(CustomConnectionKeepAliveStrategy.INSTANCE)); } public static class CustomConnectionKeepAliveStrategy extends DefaultConnectionKeepAliveStrategy { public static final CustomConnectionKeepAliveStrategy INSTANCE = new CustomConnectionKeepAliveStrategy(); private CustomConnectionKeepAliveStrategy() { super(); } / * 最大keep alive的时间(分钟) * 这里默认为10分钟,可以根据实际情况设置。可以观察客户端机器状态为TIME_WAIT的TCP连接数,如果太多,可以增大此值。 */ private final long MAX_KEEP_ALIVE_MINUTES = 10; @Override public long getKeepAliveDuration(HttpResponse response, HttpContext context) { long keepAliveDuration = super.getKeepAliveDuration(response, context); // <0 为无限期keepalive // 将无限期替换成一个默认的时间 if(keepAliveDuration < 0){ return TimeUnit.MINUTES.toMillis(MAX_KEEP_ALIVE_MINUTES); } return keepAliveDuration; } } }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176376.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午10:05
下一篇 2026年3月26日 下午10:05


相关推荐

  • 《架构之美》笔记_印象笔记如何创建目录

    《架构之美》笔记_印象笔记如何创建目录美是创造矛盾并解决矛盾。架构的多关注点(例如业务逻辑、系统扩展性、持久、并发)和简洁性就是一种矛盾,美丽的架构能解决这种矛盾,使人内心产生愉悦;随着关注点的增加,架构也在不断演进;术:分层、组件化、服务化、标准化、缓存、分离、队列、复制、冗余、代理;道:如何恰到好处地使用术,例如顿悟变化的道理、博弈中寻找平衡、相对与绝对的奥秘、开放的心态;爱因斯坦说:『让它尽可能简单,但不要过于简单』,美

    2025年6月10日
    6
  • 微型计算机的性能主要取决于什么,微型计算机硬件系统的性能主要取决于什么?…[通俗易懂]

    微型计算机硬件系统的性能主要取决于“微处理器”。微处理器是集成在一片中大规模集成电路芯片上的中央处理器,能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操作,是微型计算机的运算控制部分。微处理器是集成在一片中大规模集成电路芯片上的中央处理器,这些电路执行控制部件和算术逻辑部件的功能。微型计算机硬件系统的性能主要取决于微处理器。微处理器能完成取指令、执行指令,以及与外界存储器和逻辑部件…

    2022年4月4日
    193
  • vb教程编程实例详解pdf_vb程序设计教程答案第四版实验

    vb教程编程实例详解pdf_vb程序设计教程答案第四版实验实验8-3VB程序题:设计一个如图2.8.4所示的应用程序,要求如下:(1.)单击“打开文件”按钮弹出一个通用对话框,选择文件后显示在文本框中(2).单击“保存文件”按钮后弹出通用对话框,确定文件名后保存。(3)单击“查找下一个”按钮后在文本文件中查找单词“VB”,找到后以高亮度显示。解题,画4个按钮,1个文本框控件,再加上一个通用对话框控件,代码如下:PrivateSub…

    2022年10月7日
    8
  • Caliburn.Micro Bootstrapper及IOC容器配置

    Caliburn.Micro Bootstrapper及IOC容器配置如果想深入学习Caliburn.Micro,Bootstrapper和IOC容器配置是重中之重,一定要弄清楚,否则很难理解CM的工作方式。配置Bootstrapper的意义如果在Boostrapper中不进行任何配置的话,Bootstrapper会首先把Bootstrapper所在程序集加载到AssemblySource.Instance中。而我们在Bootstrapper中只在Displa…

    2022年7月20日
    16
  • python读取json_python读取json文件

    python读取json_python读取json文件本篇内容主要写 python 读取 json 文件的方式 JSON JavaScriptOb 是一种轻量级的数据交换格式 它基于 ECMAScript 的一个子集 json 的文件格式 使用大括号来区分表示并存储数据 python 操作 json 文件通过了两种方法 load 用于读取 json 文件 dump 用于写入 json 文件 读取 json 文件内容 返回字典格式 withop

    2026年3月18日
    2
  • 怎么新建pytest的ini文件_pytest.ini配置

    怎么新建pytest的ini文件_pytest.ini配置前言pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行查看pytest.ini的配置选项pytest-h找到以下

    2022年7月30日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号