【问题标题】:JestClient is throwing SocketTimeoutException after being idle for sometimeJestClient 在空闲一段时间后抛出 SocketTimeoutException
【发布时间】:2018-06-22 12:57:31
【问题描述】:

我正在使用 JEST 在 spring-boot 应用程序中连接到 elasticsearch。当应用程序空闲一段时间(不向 elasticsearch 发送任何请求)时,JestClient 将抛出 SocketTImeoutException。我正在使用 bean 创建客户端:

@Bean
public JestClient client() throws Exception {
    JestClientFactory factory = new JestClientFactory();
    factory.setHttpClientConfig(new HttpClientConfig
        .Builder(esURL)
        .multiThreaded(true)
        .connTimeout(60000)
        .readTimeout(60000)
        .defaultMaxTotalConnectionPerRoute(10)
        .maxTotalConnection(100).build());
    return factory.getObject();
}

这里有什么我遗漏的吗?

【问题讨论】:

  • 什么版本的es?开玩笑?
  • ES 版本 5.6.5 & Jest 版本 5.3.3
  • 您已经找到解决方案了吗?我有完全相同的问题:一段时间内的第一个请求需要 30 秒并发生超时。然后下一个请求几乎立即给出响应)(使用 jest 2.0.4)
  • @Depzor @pkgajulapalli 只是提到一个我会尝试的想法:研究这个功能 - github.com/searchbox-io/Jest/pull/149 - 意思是,配置 maxConnectionIdleTime 以便空闲连接被杀死 之前实际被使用(这会导致你得到超时异常)。测试本身的一个例子:github.com/searchbox-io/Jest/blob/v2.0.4/jest/src/test/java/io/…
  • @andrei-stefan Mmm 添加此内容时:.IllegalStateException: 预期服务正在运行,但服务已失败

标签: java spring elasticsearch javabeans elasticsearch-jest


【解决方案1】:

我会尝试的一个想法:查看此功能 - https://github.com/searchbox-io/Jest/pull/149 - 意思是,配置 maxConnectionIdleTime 以便在实际使用之前终止空闲连接(这将导致您得到超时异常)。测试本身的一个例子:https://github.com/searchbox-io/Jest/blob/v2.0.4/jest/src/test/java/io/searchbox/client/JestClientFactoryIntegrationTest.java#L116

关于用于它的值,我不确定网络套接字的超时时间是多少……猜测是 30 秒。无论您为maxConnectionIdleTime 设置什么,它都应该小于这个值。也许尝试从超时中观察您得到哪些空闲时间可以保护您,哪些不能。

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2020-02-09
    • 2019-02-18
    • 2015-11-03
    相关资源
    最近更新 更多