技术经验谈 技术经验谈
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hss01248

一号线程序员
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 日志体系

  • springboot

    • springboot中controller层实现通用的透明代理
    • dns解析优化
    • cloudflare dns解析配置和https代理配置
    • springboo中使用requestParam注解接收jsonBody里的参数
  • ruoyi-vue-pro

  • IT工具链
  • java学习路线和视频链接--尚硅谷
  • JDK动态代理原理和应用
  • jvm一图流
  • linux运维
  • spring boot笔记
  • spring-cloud学习资料和路线
  • springcloud alibaba
  • Springcloud学习笔记
  • 从java编译原理到Android aop
  • 大数据
  • 操作系统原理一图流
  • 汇编语言一图流
  • 泛型
  • 网关
  • 面试题精讲
  • java
  • springboot
hss01248
2023-05-09

dns解析优化

# DNS解析优化

# 背景

使用了cloudflare的proxy,在阿里云上请求到cf代理的域名上,经常出现dns解析失败,基本上是一次成功,下次失败. 而用dns查询工具可以看到,cf的ip基本都是那两个,在国内各省市,有的能解析成功,有的解析不成功.

于是,做一层内存缓存:

# okhttp实现

static Map<String, List<InetAddress>> dnsMap = new HashMap<>();

okHttpClient = new OkHttpClient.Builder()
                .readTimeout(Duration.ofSeconds(50))
                .writeTimeout(Duration.ofSeconds(50))
                .connectTimeout(Duration.ofSeconds(50))
                .dns(new Dns() {
                    @NotNull
                    @Override
                    public List<InetAddress> lookup(@NotNull String host) throws UnknownHostException {
                        try {
                            InetAddress[] allByName = InetAddress.getAllByName(host);
                            if(allByName != null && allByName.length >0){
                                List<InetAddress> addresses = new ArrayList<>();
                                for (InetAddress inetAddress : allByName) {
                                    addresses.add(inetAddress);
                                }
                                dnsMap.put(host,addresses);
                                return addresses;
                            }
                            List<InetAddress> addresses = dnsMap.get(host);
                            if(addresses != null && !addresses.isEmpty()){
                                return addresses;
                            }else {
                                throw new UnknownHostException(" ---> can not resole host: "+host);
                            }
                        }catch (Throwable throwable){
                            List<InetAddress> addresses = dnsMap.get(host);
                            StaticLog.warn(throwable,"UnknownHostException then read cache : "+ host+"--->"+addresses);
                            if(addresses != null && !addresses.isEmpty()){
                                return addresses;
                            }else {
                                throw new UnknownHostException(" ---> can not resole host2: "+host);
                            }
                        }


                    }
                })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# 效果

使用缓存后,看api日志, 再也没有出现UnknownHostException了.

编辑 (opens new window)
上次更新: 2023/05/09, 17:55:07
springboot中controller层实现通用的透明代理
cloudflare dns解析配置和https代理配置

← springboot中controller层实现通用的透明代理 cloudflare dns解析配置和https代理配置→

最近更新
01
截图后的自动压缩工具
12-27
02
图片视频文件根据exif批量重命名
12-27
03
chatgpt图片识别描述功能
02-20
更多文章>
Theme by Vdoing | Copyright © 2020-2025 | 粤ICP备20041795号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式