热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【es】ESRestHighLevelClient请求报错:Connectionresetbypeer

1.概述转载源码解读相似问题:【Elasticsearch】解决ElasticsearchHTTP方式查询报SocketTimeoutException的问题C

在这里插入图片描述


1.概述

转载

源码解读

相似问题:【Elasticsearch】解决Elasticsearch HTTP方式查询报SocketTimeoutException的问题 Connection reset by peer


2.问题描述

使用 Spring boot 服务使用 ES RestHighLevelClient 连接 ES 运行一段时间就会出现Connection reset by peer的异常。这个异常稍微一查就知道,原因是因为 TCP 连接中断,业务数据写入失败。

而连接关闭有很多原因,是 ES 服务器端不能完全控制的。有可能关闭了连接,有可能有防火墙,交换机,vpn 等,也有可能是 keepalive 设置问题,更换了连接服务器节点,网络不稳定等。


3.知识回顾


3.1 TCP 长连接和短连接

TCP 协议中有长连接和短连接之分。短连接在数据包发送完成后就会自己断开,长连接在发包完毕后,会在一定的时间内保持连接,即我们通常所说的 Keepalive(存活定时器)功能。


3.2 TCP 保活机制

保活机制是由一个保活计时器实现的。当计时器被激发,连接一段将发送一个保活探测报文,
另一端接收报文的同时会发送一个 ACK 作为响应。
如果客户端无响应服务器将中断连接,否则会重置保活计时器。
服务器端 Linux 有三个参数可以控制保活时间

tcp_keepalive_time(开启 keepalive 的闲置时长)
tcp_keepalive_intvl(keepalive 探测包的发送间隔)
tcp_keepalive_probes (如果对方不予应答,探测包的发送次数)

TCP 保活机制详见:https://segmentfault.com/a/1190000021057175


4.问题解决

本人实际采用了方式 3 和方式 4


4.1 方案1

方式 1:修改 RestHighLevelClient 连接请求的超时时间

// 默认 1000ms 可以尝试增加到 10000ms
RestClientBuilder builder = RestClient.builder(new HttpHost(endpoint, port)).setHttpClientConfigCallback(httpClientBuilder->
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)).setRequestConfigCallback(requestConfigBuilder ->
requestConfigBuilder.setConnectTimeout(10000).setSocketTimeout(60000));return new RestHighLevelClient(builder);
// 单个请求修改:
request.timeout(TimeValue.timeValueSeconds(60));

4.2 方案2

方式 2:创建一个定时器定期探测下 es 保持 keepAlive

// 可以尝试在 Spring boot 创建一个定时器定期探测下 es 保持 keepAlive
@Scheduled(fixedRate = 60000, initialDelay = 60000)
public void keepConnectionAlive() {log.debug("Trying to ping Elasticsearch");try {final long noOfSportsFacilities = restHighLevelClient.status();log.debug("Ping succeeded for SportsFacilityViewRepository, it contains {} entities", noOfSportsFacilities);} catch (Exception e) {log.debug("Ping failed for SportsFacilityViewRepository");}
}

4.3 方案3

方式 3:设置 RestHighLevelClient keepalive 时间

RestClientBuilder builder = RestClient.builder(hosts);
builder.setHttpClientConfigCallback(callback -> callback.setDefaultCredentialsProvider(credentialsProvider).setKeepAliveStrategy((response, context) -> KEEP_ALIVE_MS));

4.4 方案4

方式 4:代码层面捕获异常,重试请求

小结

本文章只是为了简要记录,具体问题的解析可以详见。

https://stackoverflow.com/questions/52997697/how-to-get-around-connection-reset-by-peer-when-using-elasticsearchs-restclie


5.源码

使用RestHighLevelClient请求Es抛错listener timeout after waiting for [30000] ms


推荐阅读
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 如何在PHP中准确获取服务器IP地址?
    如何在PHP中准确获取服务器IP地址? ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • DHCP三层交换机设置方式全局模式和接口模式设置方式和命令resetsave回车输入yreboot输入n输入y重启后就恢复默认设置了默认用户名密码adminAdmin@huawei ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有