第一次执行操作后Jest客户端关闭

时间:2016-12-14 21:50:06

标签: java elasticsearch aws-lambda jest amazon-elasticsearch

我创建了一个AWS Lambda软件包(Java),其中包含从Amazon S3读取某些文件并将数据推送到AWS ElasticSearch Service的功能。由于我使用的是AWS弹性搜索,因此我无法使用传输客户端,在这种情况下,我正在使用Jest Client通过REST进行推送。问题在于Jest客户端。

这是我的Jest客户端实例:

public JestClient getClient() throws InterruptedException{
    final Supplier<LocalDateTime> clock = () -> LocalDateTime.now(ZoneOffset.UTC);

    DefaultAWSCredentialsProviderChain awsCredentialsProvider = new DefaultAWSCredentialsProviderChain();

    final AWSSigner awsSigner = new AWSSigner(awsCredentialsProvider, REGION, SERVICE, clock);

    JestClientFactory factory = new JestClientFactory() {
        @Override
        protected HttpClientBuilder configureHttpClient(HttpClientBuilder builder) {
            builder.addInterceptorLast(new AWSSigningRequestInterceptor(awsSigner));
            return builder;
        }

        @Override
        protected HttpAsyncClientBuilder configureHttpClient(HttpAsyncClientBuilder builder) {
            builder.addInterceptorLast(new AWSSigningRequestInterceptor(awsSigner));
            return builder;
        }
    };

    factory.setHttpClientConfig(
            new HttpClientConfig.Builder(URL)
                    .discoveryEnabled(true)
                    .multiThreaded(true).build());

    JestClient jestClient = factory.getObject();
    return jestClient;
}

由于AWS Elasticsearch域受IAM访问策略保护,因此我签署了AWS的授权请求(example here)。我使用POJO来索引文档。

我遇到的问题是我无法使用jest客户端实例执行多个操作。例如,如果我首先创建了索引:

client.execute(new CreateIndex.Builder(indexName).build()); 

以后,我想,例如做一些批量索引:

for (Object object : listOfObjects) {
    bulkIndexBuilder.addAction(new Index.Builder(object ).
                      index(INDEX_NAME).type(DOC_TYPE).build());
        }
client.execute(bulkIndexBuilder.build());

只会执行第一个操作而第二个操作将失败。这是为什么?是否可以执行多个操作?

Morover,使用提供的代码,当我想索引文档时,我无法执行超过20个批量操作。基本上,大约20个很好,但除此之外,client.execute(bulkIndexBuilder.build());只是不执行而客户端关闭。

任何帮助或建议都会得到满足。

更新: AWS ElasticSearch似乎不允许连接到单个节点。只需关闭Jest客户端.discoveryEnabled(false)中的节点发现即可解决所有问题。这answer有所帮助。

0 个答案:

没有答案