You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何缩短Spring WebClient的DNS缓存TTL至30秒?

缩短Spring Webflux WebClient的DNS缓存时长

Reactor Netty的HttpClient默认使用DefaultAddressResolverGroup,其DNS缓存默认时长为30分钟。要将缓存缩短至30秒,需要自定义地址解析器并配置到HttpClient中。

具体实现步骤

  1. 创建自定义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();
  1. 将自定义解析器配置到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:07:09