如何缩短Spring WebClient的DNS缓存TTL至30秒?
缩短Spring Webflux WebClient的DNS缓存时长
Reactor Netty的HttpClient默认使用DefaultAddressResolverGroup,其DNS缓存默认时长为30分钟。要将缓存缩短至30秒,需要自定义地址解析器并配置到HttpClient中。
具体实现步骤
- 创建自定义DNS解析器,强制设置缓存TTL为30秒:
import io.netty.resolver.DefaultAddressResolverGroup; import io.netty.util.concurrent.DefaultThreadFactory; import java.time.Duration; // 自定义DNS解析器,固定缓存时长30秒 DefaultAddressResolverGroup customDnsResolver = DefaultAddressResolverGroup.builder() .maxTtl(Duration.ofSeconds(30)) .minTtl(Duration.ofSeconds(30)) .threadFactory(new DefaultThreadFactory("custom-dns-resolver")) .build();
- 将自定义解析器配置到HttpClient中,再构建WebClient:
HttpClient client = HttpClient.create() .responseTimeout(Duration.ofMillis(connectionTimeout)) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout) .resolver(customDnsResolver); // 应用自定义DNS解析器 WebClient serviceWebClient = WebClient.builder() .clientConnector(new ReactorClientHttpConnector(client)) .baseUrl(deployedServiceHost) .build();
说明
- 同时设置
maxTtl和minTtl为30秒,可确保DNS记录的缓存时长固定为目标值,不受DNS服务器返回的TTL影响。 threadFactory用于指定DNS解析线程的名称,方便日志排查和线程管理。
内容的提问来源于stack exchange,提问作者Aleksandr Filichkin
相关产品推荐
相关产品推荐

