gpt4 book ai didi

java - HttpClients PoolingHttpClientConnectionManager 和 DNS 缓存

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:00 27 4
gpt4 key购买 nike

所以我似乎在使用 PoolingHttpClientConnectionManager 时遇到与 DNS 主机名解析缓存相关的问题。我有一个可以调用外部服务的 api。此服务使用 Akamai 边缘缓存,因此 IP 地址可能会更改。这个 api 负载很重。我为池大小设置了 100 个连接最大值,空闲超时线程在空闲 30 秒后关闭空闲连接。但是在交通繁忙的情况下,我认为连接永远不会空闲。因此,如果此服务主机的 IP 地址发生变化,我的应用程序似乎永远不会接收到该更改,因为池中的所有连接都保留在旧的 DNS 解析 IP 地址上。

我已经通过更改 mac 上的/etc/hosts 文件(并刷新操作系统缓存)在本地测试了这个假设。只要我的 API 应用程序有稳定的流量,即使在 java.security 中设置了 5 秒的 TTL,它也永远不会接收到更改。在将主机名更改为指向会导致调用失败的无效 IP 地址后,我让它运行了 20 分钟,而且它从未失败过。我停止了我正在发送的 JMeter 流量,等待大约 30 秒并手动点击它,调用失败,告诉我它收到了更改。

有什么想法吗?我需要停止使用连接池吗?或者编写我自己的 DnsResolver(不确定它应该如何工作)?如果此服务的 DNS 条目发生更改,我如何确保连接池中的连接会更新?

最佳答案

因此,我以某种方式忽略了采用 TimeToLive 值的 PoolingHttpClientConnectionManager 的构造函数。这似乎为每个创建的连接设置了一个过期时间。我对其进行了测试,它肯定会在此 TTL 值之后获取我本地主机文件中的更改。我只是不知道这是否是解决我的问题的正确方法。如果我没有听到其他选项,我会认为这是对我的问题的正确答案。

关于java - HttpClients PoolingHttpClientConnectionManager 和 DNS 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29107681/

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