问题描述 投票:0回答:1
DnsNameResolverBuilder

方法:

如果DNS服务器返回的DNS资源记录的TTL小于最小TTL或大于最大TTL,则该解析器将忽略从DNS服务器中的TTL,而使用最小TTL或最大TTL。

在我的情况下,DNS服务器的TTL设置为5分钟,因此我相信MAXTTL(10秒)应用于缓存DNS结果,但我不观察到。我只注意到,我只在5分钟后仅重试,而不是在10秒后重试的最新IP。 我在这里错过了什么吗?任何帮助都非常感谢。

目前为我的实施,我正在使用
Java11
io.netty:netty-all:4.1.100.Final

可能的原因和修复

1。 Netty的TTL行为

方法
ttl(minTtl, maxTtl)
如果在给定范围之外,则应覆盖DNS服务器的TTL。

,但是,如果DNS响应明确设置了5分钟的TTL,Netty仍然可能尊重它而不是使用
java spring-boot dns netty reactor-netty
1个回答
0
投票
.

2。验证Netty的DNSCache

NETTY使用内部DNS缓存。要禁用它,请尝试:

.dnsCache(NoopDnsCache.INSTANCE) // Disables Netty's internal cache
  • 这迫使NetTy始终查询DNS服务器而不是使用缓存值。
    3。使用自定义DNSCACHE
  • 启动禁用缓存,提供自定义的缓存实现:
  • .resolveCache(new DefaultDnsCache(5, 10, 10)) // minTTL, maxTTL, negativeTTL

这确保Netty执行您设置的TTL值。 4。禁用cname缓存

如果涉及CNAME记录,则可能会被不同的缓存。防止CNAME缓存:
.cnameCache(NoopDnsCnameCache.INSTANCE)

5。检查Java的全球DNS缓存 java具有自己的DNS缓存机制,可能会覆盖Netty的行为。集:

System.setProperty("networkaddress.cache.ttl", "10"); System.setProperty("networkaddress.cache.negative.ttl", "10");

确保Java不会缓存DNS响应超过10秒。

端:力DNS刷新

如果您想避免完全缓存,请强迫新鲜的DNS分辨率:

dnsNameResolver.resolveAll(hostname).syncUninterruptibly().getNow();

这种阻止使用陈旧的缓存条目。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.