在 Elasticsearch 文档中指定了有关 http.port 配置的以下内容:
http.port
传入 HTTP 请求要绑定到的端口。接受单个值或范围。如果指定了范围,则节点将绑定到该范围中的第一个可用端口。
默认值为 9200-9300。
假设 Elasticsearch 自动选择端口 9202,因为 9200 已经在使用中。Java 客户端应用程序如何知道选择了哪个端口,并且必须使用哪个端口来创建 RestHighLevelClient 对象?有没有办法查询可以提供端口号信息的其他服务?
提前谢谢。
<小时 />更新
在第一个答案之后,我尝试通过执行以下命令在 Windows 计算机(生产环境)中重现这些步骤:
> tasklist | findstr "elasticsearch"
elasticsearch-service-x64 2232 Services 0 537,764 K
> netstat -aon | find /i "2232"
TCP 0.0.0.0:9200 0.0.0.0:0 LISTENING 2232
TCP 0.0.0.0:9300 0.0.0.0:0 LISTENING 2232
TCP 127.0.0.1:9200 0.0.0.0:0 LISTENING 2232
TCP 127.0.0.1:9300 0.0.0.0:0 LISTENING 2232
TCP 127.0.0.1:49201 127.0.0.1:49202 ESTABLISHED 2232
TCP 127.0.0.1:49202 127.0.0.1:49201 ESTABLISHED 2232
TCP 127.0.0.1:49203 127.0.0.1:49204 ESTABLISHED 2232
TCP 127.0.0.1:49204 127.0.0.1:49203 ESTABLISHED 2232
TCP 127.0.0.1:49205 127.0.0.1:49206 ESTABLISHED 2232
TCP 127.0.0.1:49206 127.0.0.1:49205 ESTABLISHED 2232
...
TCP 127.0.0.1:49275 127.0.0.1:49276 ESTABLISHED 2232
TCP 127.0.0.1:49276 127.0.0.1:49275 ESTABLISHED 2232
TCP [::1]:9200 [::]:0 LISTENING 2232
TCP [::1]:9300 [::]:0 LISTENING 2232
结果显示了使用 9200 端口 (http.port) 的几行:
TCP 0.0.0.0:9200 0.0.0.0:0 LISTENING 2232
TCP 127.0.0.1:9200 0.0.0.0:0 LISTENING 2232
TCP [::1]:9200 [::]:0 LISTENING 2232
如果我必须解析该结果以获取端口号,我应该查找哪些 IP 地址?或者根本不重要?
RestHighLevelClient
是线程安全的,它由应用程序在启动时或执行第一个请求时实例化。它是如何"在引擎盖下"完成的,也许你可以在这里签到RestClientBuilder.java
。
不确定这个问题,但如果您不确定ES
正在使用哪个端口,可以检查一下
[root@myserver ~]# service elasticsearch status
elasticsearch (pid 5384) is running...
## netstat on pid
[root@myserver~]# netstat -plunt | grep 5384
tcp 0 0 ::ffff:10.100.14.146:9300 :::* LISTEN 5384/java
tcp 0 0 ::ffff:10.100.14.19:9200 :::* LISTEN 5384/java
tcp 0 0 ::ffff:127.0.0.1:9200 :::* LISTEN 5384/java