【Netty源码解读和权威指南】第88篇:Netty DNS解析——自定义域名解析的底层实现

【Netty源码解读和权威指南】第88篇:Netty DNS解析——自定义域名解析的底层实现
上一篇【第87篇】Netty Proxy Protocol支持——获取真实客户端IP下一篇【第89篇】深入理解Netty内存屏障与JMM——如何保证并发安全一、JVM DNS缓存问题// JVM默认DNS缓存策略// security模式缓存永久线上事故高发// 非security模式缓存30秒// 解决方案1JVM参数-Dsun.net.inetaddr.ttl10// DNS缓存10秒-Dnetworkaddress.cache.ttl10// 解决方案2使用Netty DNS// 完全控制DNS解析不受JVM缓存影响二、DnsNameResolver使用EventLoopGroupgroupnewNioEventLoopGroup();DnsNameResolverBuilderbuildernewDnsNameResolverBuilder(group.next()).channelType(NioDatagramChannel.class)// DNS基于UDP.queryTimeoutMillis(5000)// 超时5秒.maxQueriesPerResolve(3)// 最多重试3次.ttl(10,TimeUnit.SECONDS)// 缓存10秒.ndots(1);// 最少点号数DnsNameResolverresolverbuilder.build();// 异步DNS解析FutureInetAddressfutureresolver.resolve(www.example.com);future.addListener(f-{if(f.isSuccess()){System.out.println(解析结果: f.getNow());}});三、自定义DNS服务器// 指定DNS服务器InetSocketAddressdnsServernewInetSocketAddress(8.8.8.8,53);DnsNameResolverresolvernewDnsNameResolverBuilder(group.next()).nameServerProvider(newSingletonDnsServerAddressStreamProvider(dnsServer)).build();四、应用场景场景实现服务发现DNS解析后端地址负载均衡DNS轮询灰度发布DNS切流上一篇【第87篇】Netty Proxy Protocol支持——获取真实客户端IP下一篇【第89篇】深入理解Netty内存屏障与JMM——如何保证并发安全