JestClient在空闲一段时间后会抛出SocketTimeoutException异常。

7

我正在使用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();
}

这里有什么我忽略的吗?


你已经找到解决方案了吗?我也遇到了完全相同的问题:在一段时间后第一个请求需要30秒才能完成,然后会超时...接下来的请求几乎立即得到响应)(使用jest 2.0.4) - Depzor
2
@Depzor @pkgajulapalli 只是提出一个想法:可以尝试查看此功能 - 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 - Andrei Stefan
@andrei-stefan 当添加以下内容时:.IllegalStateException:期望服务正在运行,但服务已失败 - Depzor
看起来很奇怪。那只是一个参数,为什么你只是通过添加它就得到了它?!你确定是参数的错吗? - Andrei Stefan
Mmm guava 依赖冲突: java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor; - Depzor
显示剩余6条评论
1个回答

3
我建议你尝试这个功能: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设置什么值,它都应该小于该值。或许可以通过观察您获得的超时来确定哪些空闲时间需要保护,哪些不需要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接