JestClient闲置一段时间后抛出SocketTimeoutException

pkg*_*lli 5 java spring javabeans elasticsearch jest

我正在使用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();
}
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么吗?

And*_*fan 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它都应该小于这个值。也许尝试从超时中观察哪些空闲时间可以保护你,哪些不能。