如何在 Spring Data Elasticsearch 2.2.3.RELEASE 中配置 Rest 高级客户端的套接字超时

2024-03-29

我将 Spring Boot Starter Data Elasticsearch 2.2.3.RELEASE 与 Elasticsearch v6.8.6 结合使用。我配置了 RestHighLevelClient 以连接到集群。

现在我在不同的操作中不断收到 SocketTimeoutException:

java.net.SocketTimeoutException: 5,000 milliseconds timeout on connection http-outgoing-95 [ACTIVE]
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.timeout(HttpAsyncRequestExecutor.java:387) ~[httpcore-nio-4.4.13.jar!/:4.4.13]
at org.apache.http.impl.nio.client.InternalIODispatch.onTimeout(InternalIODispatch.java:92) ~[httpasyncclient-4.1.4.jar!/:4.1.4]
at org.apache.http.impl.nio.client.InternalIODispatch.onTimeout(InternalIODispatch.java:39) ~[httpasyncclient-4.1.4.jar!/:4.1.4]
at org.apache.http.impl.nio.reactor.AbstractIODispatch.timeout(AbstractIODispatch.java:175) ~[httpcore-nio-4.4.13.jar!/:4.4.13]
at org.apache.http.impl.nio.reactor.BaseIOReactor.sessionTimedOut(BaseIOReactor.java:261) ~[httpcore-nio-4.4.13.jar!/:4.4.13]
at org.apache.http.impl.nio.reactor.AbstractIOReactor.timeoutCheck(AbstractIOReactor.java:502) ~[httpcore-nio-4.4.13.jar!/:4.4.13]
at org.apache.http.impl.nio.reactor.BaseIOReactor.validate(BaseIOReactor.java:211) ~[httpcore-nio-4.4.13.jar!/:4.4.13]
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:280) ~[httpcore-nio-4.4.13.jar!/:4.4.13]
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104) ~[httpcore-nio-4.4.13.jar!/:4.4.13]
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591) ~[httpcore-nio-4.4.13.jar!/:4.4.13]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]

我可以在 Spring Boot 应用程序中配置套接字超时吗?如果可以,在哪里配置。

我尝试配置 ClientConfiguration 的套接字超时,我创建了 RestHighLevelClient,但没有效果:

    ClientConfiguration clientConfiguration = ClientConfiguration.builder()
            .connectedTo(nodes)
            .withSocketTimeout(Duration.ofSeconds(30))
            .build();

    RestHighLevelClient client = RestClients.create(clientConfiguration).rest();

简而言之,你应该使用setConnectTimeout方法(构建时 休息客户端)。

因此,这是我一直在 ES (6.5v) 使用的 Java String Boot (2.1.1.RELEASE) 配置(成功设置连接和套接字超时)。

在直接使用以下源之前,请正确设置 ENV 变量(在 .yml 文件中)。

//yml设置

elasticsearch:
hosts:
host1: // you can set as an array with > sign
  name: hostname
  port: 9200
username:
password:
connectTimeout: 6000
socketTimeout: 6000

// 配置类

@Configuration
public class ElasticSearchConfig {

  @Autowired
  private Environment environment;

  @Bean(destroyMethod = "close", name = "esHighLevelRestClient")
  public RestHighLevelClient highLevelClient() {
    return new RestHighLevelClient(restClientBuilder());
  }

  @Bean(destroyMethod = "close")
  public RestClient restClient() {
    return restClientBuilder().build();
  }

  private RestClientBuilder restClientBuilder() {
    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    credentialsProvider.setCredentials(AuthScope.ANY,
            new UsernamePasswordCredentials(
                    environment.getProperty("elasticsearch.username"),
                    environment.getProperty("elasticsearch.password")));

    // you can set N hosts
    List<HttpHost> hosts = new ArrayList<>();
    hosts.add(new HttpHost(
            environment.getProperty("elasticsearch.hosts.host1.name", String.class),
            environment.getProperty("elasticsearch.hosts.host1.port", Integer.class),
            "http"));

    return RestClient.builder(Iterables.toArray(hosts, HttpHost.class))
            .setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder
                    .setConnectTimeout(environment.getProperty("elasticsearch.connectTimeout", Integer.class))
                    .setSocketTimeout(environment.getProperty("elasticsearch.socketTimeout", Integer.class)))
            .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
  }}

希望能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring Data Elasticsearch 2.2.3.RELEASE 中配置 Rest 高级客户端的套接字超时 的相关文章

随机推荐

  • 如何在不破坏localStorage中类型的情况下存储和获取对象?

    我正在使用 TypeScript 开发 AngularJS 项目 A person是一个对象Person班级 我需要存储person对象在localStorage并用它的类型检索它 窗口本地存储 https developer mozill
  • Android 创建日历事件

    我需要为 Android 应用程序创建多个日历事件 使用这个question https stackoverflow com questions 3721963 how to add calendar events in android 4
  • 从 C# 中的文本文件中读取数字

    这应该是很简单的事情 我只想从由空格分隔的标记组成的文本文件中读取数字和单词 在 C 中如何做到这一点 例如 在 C 中 以下代码可以读取整数 浮点数和字 我不想使用正则表达式或编写任何特殊的解析代码 ifstream in file tx
  • 使用 PdfMerger iText7 将 PdfDocument 转换为 byte[]

    我有一个要求 我使用生成不同的 pdf iText 7 1 11 我在用PdfMerger即时合并所有 pdf 我能够在本地系统成功生成 pdf 但应用程序需要发送bye 作为回应 我找到的解决方案here https kb itextpd
  • 标识符前面的::(双冒号)是什么意思?

    这条线 https github com rust lang libc blob 4af234205f440be38d9036a5bdbcfeed55fb2ced src unix linux like mod rs L2来自铁锈libc
  • ASP.NET真正的异步操作

    我正在尝试从 ASP NET 页面发出多个 HTTP 请求 页面本身不需要知道响应 并且应该继续处理并交付页面 我尝试将 HTTP 代码放入 BackgroundWorker 中并异步运行它 但是我最初收到以下错误 在此上下文中不允许异步操
  • 返回上一屏幕时,反应导航焦点立即模糊于输入

    当我导航到新屏幕时 我想专注于文本输入 当我将屏幕添加到堆栈时 这有效 但当我返回堆栈时 这不起作用 相反 输入聚焦一秒钟并立即模糊 这是我得到的 屏幕 A 位于堆栈中的第一个 输入立即模糊 屏幕 B 已添加到堆栈中并按预期工作 知道是什么
  • 尝试上传到使用多个元数据生成的 GCP 签名网址时收到 403

    我生成了一个 GCP 签名网址 标头中包含两个元数据值 例子 x goog meta reviewer 简 x goog meta author 杰克 当我尝试将文件上传到生成的签名 URL 并在标头中设置元数据时 我收到 403 禁止请求
  • SDL_RENDERER_PRESENTVSYNC 显示不一致

    我最近决定开始使用 SDL 作为我的库之一来编写 C 游戏 在编写程序和学习 SDL 的过程中 我偶然发现了程序中的一个特殊错误 并决定在 SSCCE 中复制它 以确保我没有发疯 问题似乎是 当我将 SDL RENDERER PRESENT
  • Powershell v4 不自动导入模块

    我在用Microsoft PowerShell v4 PS C gt get host Name ConsoleHost Version 4 0 InstanceId 3b4b6b8d 70ec 46dd 942a bfecf5fb6f31
  • Facebook 应用程序托管在 Google App Engine 上

    我是 Facebook 应用程序的新手 我已经在 GAE 上启动并运行了一个应用程序 使用 python 我想将它与 Facebook 集成 这样我就可以访问一些用户的数据来帮助我个性化应用程序 例如喜欢的页面 兴趣 他们来自哪里等数据 还
  • 在 GitHub for Windows 中克隆多个分支

    有时我需要在本地磁盘上同时拥有 GitHub 存储库的两个不同分支 尤其是在处理 gh pages 时 我通常通过在不同的文件夹中创建存储库的多个克隆来实现此目的 并使用不同的分支进行克隆 是否可以在 Windows UI 的 GitHub
  • System.Xml.XmlException:给定编码中的字符无效。 8271 行,位置 163

    我正在编写一个简单的 XML 解析器 它将传递以下 XML 输出 http www cpalead com dashboard reports campaign rss php id 187000 http www cpalead com
  • 是否可以使用字典理解来反转Python中的字典

    我想反转字典key value使用字典理解进行配对 但如果新字典的键有多个值 则它将被最后一个值替换 如果重复某个键 是否可以使用理解附加到新字典中的值 Input test di a 1 b 2 c 3 d 2 Code v k for
  • Google Chrome 开发者工具未在 css 旁边显示 css 文件名

    It s a bug of google chrome or there are some guidelines which i should stick to to return that feature 谢谢 UPDATED问题是由 p
  • 如何在 Visual Studio 2008 中保持文档选项卡按上次使用情况排序

    注册表更改是什么 告诉 Visual Studio 始终将当前文档放置在窗口的左侧 默认实现是这样的 如果您打开了 10 个文档 并且您正在编辑第 5 个文档 那么它的选项卡将是该组中的第 5 个选项卡 随着注册表的更改 当您单击第五个文档
  • numpy.array 的总和部分

    假设我有以下数组 a np array 1 2 3 4 5 6 7 8 9 10 11 12 3 5 6 7 8 9 我想对第一行的前两个值求和 1 2 3 然后是接下来的两个值 3 4 7 进而5 6 11 对每一行依此类推 我想要的输出
  • HTML5 章节与文章

    我有一个由各种 部分 组成的页面 例如视频 新闻源等 我有点困惑如何用 HTML5 表示这些 目前我将它们作为 HTML5 section s 但经过进一步检查 看起来更正确的标签是 section
  • 如何从列表创建分组条形图

    我正在尝试绘制一个条形图 它比较两种不同情况下的多个项目的数量 所需的输出将是一个条形图 其中 4 4 8 个条形图彼此相邻 指示每种情况的每种类型的数量 这是我编写的初始代码 它没有给出我的期望 我该如何修改这个 import numpy
  • 如何在 Spring Data Elasticsearch 2.2.3.RELEASE 中配置 Rest 高级客户端的套接字超时

    我将 Spring Boot Starter Data Elasticsearch 2 2 3 RELEASE 与 Elasticsearch v6 8 6 结合使用 我配置了 RestHighLevelClient 以连接到集群 现在我在