之前使用clickhouse的时候由于创建太多httpclient造成了内存泄漏,使用单例模式解决了这个问题,为了深入了解httpclient,开始尝试阅读他的源码,个人觉得httpclient的精髓可能主要是他的责任链
责任链,顾名思义是一条调用链,责任链模式是一种设计模式,链路上的每一个节点控制一个单独的功能,下图为httpclient的责任链
CloseableHttpClient是一个外部的封装,封装的主要功能是各种各样的请求方法
internalHttpclient可以说主要作用是封装配置和请求,将他们封装成自己想要的格式
retryExec看名字就知道主要负责重试功能
mainClientExec是核心逻辑,内部包含执行请求的功能和链接的功能,控制着连接池的获取、socket连接的建立、链接的释放,可以说是HttpClient的核心了
个人感觉httpclient主要学习的东西不是啥连接池,其实是责任链,把责任链模式学会之后后面就基本能捋通了
责任链模式:
https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html



