gpt4 book ai didi

Java:获取 DNS 负载均衡器后面的服务器的 IP 地址

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:37 26 4
gpt4 key购买 nike

我正在使用主机名从客户端连接到服务器,如下所示:-

    HttpPost post = new HttpPost(serverUrl);
post.setEntity(new StringEntity(jsonRequestString, ContentType.APPLICATION_JSON));
HttpResponse response = httpClient.execute(post);
int ret = response.getStatusLine().getStatusCode();

我正在使用 org.apache.http.* 包。现在服务器在 DNS 负载平衡器后面,有 8 个唯一的 IP 地址绑定(bind)到主机名。但我相信 JVM 的单次运行中的所有请求都将发送到相同的 IP 地址。

  1. 有没有办法打印DNS解析后返回的实际IP?
  2. JVM 是否进行本地 DNS 缓存?

编辑:

networkaddress.cache.ttlnetworkaddress.cache.negative.ttl 设置为 0 无效。要么我没有正确设置它们。

public static void main(String[] args) throws Exception {
java.security.Security.setProperty("networkaddress.cache.ttl", "0"); // no
// cache
java.security.Security.setProperty("networkaddress.cache.negative.ttl", "0"); // no
while (true) {
System.out.println(InetAddress.getByName("google.com"));
Thread.sleep(100);
}

输出:

google.com/216.58.197.78
google.com/216.58.197.78
google.com/216.58.197.78
google.com/216.58.197.78
google.com/216.58.197.78
google.com/216.58.197.78
google.com/216.58.197.78
google.com/216.58.197.78
google.com/216.58.197.78
google.com/216.58.197.78
google.com/216.58.197.78
........
........

最佳答案

Is there a way to print the actual IP returned after DNS resolution?

您可以尝试配置记录器并检查来自“org.apache.http.impl.conn.HttpClientConnectionOperator”的日志消息

Reference

Does JVM does local DNS caching?

这取决于配置,但很可能是的,请检查这些设置:

网络地址.cache.ttl 在 java.security 中指定以指示从名称服务中成功名称查找的缓存策略。该值指定为整数以指示缓存成功查找的秒数。

-1 值表示“永远缓存”。默认行为是在安装安全管理器时永久缓存,在未安装安全管理器时缓存实现特定时间段。

networkaddress.cache.negative.ttl(默认值:10)在 java.security 中指定以指示从名称服务中查找不成功名称的缓存策略。该值指定为整数以指示缓存不成功查找失败的秒数。

0 值表示“从不缓存”。值 -1 表示“永远缓存”。

Reference

更新

您是否尝试直接调用 API 将主机名解析为所有 IP 地址?

InetAddress.getAllByName(host)

来自 javadocs :

Given the name of a host, returns an array of its IP addresses, based on the configured name service on the system.

还有 interesting article on this topic (自己没试过)

关于Java:获取 DNS 负载均衡器后面的服务器的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41672874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com