AWS 托管 ElasticSearch 上的 Elastic Transport 客户端
我正在尝试将 AWS 托管 ElasticSearch 用于我的项目。
我已经遵循了 https://aws.amazon.com/blogs/aws/new-amazon-elasticsearch-service/,我能够启动一个实例并且成功。但是我无法使用 elasticsearch 传输客户端从我的服务连接到同一实例。
我知道传输客户端应该连接到9300端口,而该端口我无法通过aws控制台打开。
以下是我用于连接的代码,它能够成功连接到9300端口上的ec2计算机上的弹性搜索设置。
ImmutableSettings.Builder settings = ImmutableSettings.settingsBuilder();
settings.put("cluster.name", "my-cluster-name")
.put("client.transport.nodes_sampler_interval", "15s")
.put("client.transport.ping_timeout", "15s")
.put("client.transport.sniff", true)
.put("client.transport.ignore_cluster_name", false).build();
client = new TransportClient(settings)
.addTransportAddress(
new InetSocketTransportAddress(
env.getProperty("elastic-host-url-provided-by-aws",80)
));
我收到异常
org.elasticsearch.client.transport.NoNodeAvailableException: none the 配置的节点都不可用: [] at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:305) at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:200) at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:106) atorg.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:98)
我怀疑这个错误是因为我正在通过HTTP端口连接传输客户端。但我不知道,aws托管弹性搜索实例的TCP端口是什么。我在aws文档中搜索,但找不到任何内容。如果有人使用TransportClient与Amazon ES连接,请告诉我。
注意:我已经验证了我使用的elasticsearch java jar版本与服务器相同。从我的系统中,我能够访问 Kibana 和 ES HTTP PORTS,而不会出现任何问题。