首页 > 解决方案 > ElasticSearch - RestHighLevelClient java.io.IOException:现有连接被远程主机强行关闭

问题描述

100K我使用单个查询从索引中获取plus 文档。为此,我正在使用ScrollSearchAPI。之后,我将逐个迭代每个文档,并在其中添加一个字段并为此创建一个新索引。

RestHighLevelClient用于 Java 代码和 ElasticSearch 之间的连接。我已经设置了几个小时的Timeout选项25(setMaxRetryTimeoutMillis(90000000))。

但是,30 分钟后仍然出现以下异常

Exception in thread "main" java.io.IOException: An existing connection was forcibly closed by the remote host
        at sun.nio.ch.SocketDispatcher.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(Unknown Source)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
        at sun.nio.ch.IOUtil.read(Unknown Source)
        at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
        at org.apache.http.impl.nio.reactor.SessionInputBufferImpl.fill(SessionInputBufferImpl.java:204)
        at org.apache.http.impl.nio.codecs.AbstractMessageParser.fillBuffer(AbstractMessageParser.java:136)
        at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:241)
        at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
        at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
        at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114)
        at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
        at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
        at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:588)
        at java.lang.Thread.run(Unknown Source)

我的 ElasticSearch 服务器正在远程机器上运行。一旦我得到这个异常,我的远程机器 ES 服务器也会自动关闭。

请在下面找到我为RestHighLevelClient.

private static RestClientBuilder builder = RestClient.builder(new HttpHost("My_Server.com", 9200, "http"), 
            new HttpHost("My_Server.com", 9201, "http"))
            .setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
                @Override
                public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
                    return requestConfigBuilder.setConnectTimeout(90000000)//25hours
                            .setSocketTimeout(90000000);

                }
            })
            .setMaxRetryTimeoutMillis(90000000);


    private static RestHighLevelClient instance4 = new RestHighLevelClient(builder);

    public static RestHighLevelClient getInstance3() {
        return instance4;
    }

标签: javahttpelasticsearchelastic-stack

解决方案


推荐阅读