ESA HttpClient

ESA HttpClient is an asynchronous event-driven http client based on netty.

Features

  • Http1/H2/H2cUpgrade
  • Https
  • Epoll/NIO
  • Interceptor
  • Filter
  • Retry, Redirect, 100-expect-continue
  • Segmented read/write
  • Multipart
  • Metrics
  • more features…

Getting Started

It’s so easy to get start with HttpClient.

Interceptor

HttpRequest处理过程中,有时可能需要执行Retry、Redirect、Cache等操作,使用Interceptor可以实现类似功能。

Filter

Filter分为RequestFilterResponseFilter两种,前者主要用于处理HttpRequest,在所有InterceptorHttpRequest处理之后执行, 后者主要用于处理HttpResponse,在响应headers到达之后立即执行,此时所有拦截器对HttpResponse的处理均未开始执行。

DNS扩展

在每次建立连接前,client可能需要将域名解析成IP地址,HttpClient通过适配netty原生的AddressResolverGroup提供了一种更加简单、 灵活的NameResolver扩展,用于将url地址中的域名解析成IP地址。

自定义响应处理

默认情况下,HttpClient需要将整个响应body内容聚合后存放在内存中返回给业务处理,对于响应body内容较大的请求,此种方式可能会导致OOM。HttpClient 开放了底层的接口,支持用户自定义响应信息处理Handler,用于处理接收到的响应headers、body(分块的)、trailers等数据。通过这种方式,可以 灵活的处理响应数据,避免响应body堆积在内存中产生OOM的风险。

分块读写

HttpClient支持分块写请求数据及分块处理响应数据,分块读功能请参考自定义响应处理,此处不再赘述。本文仅介绍分块写请求body相关功能。

文件上传及下载

HttpClient支持文件上传和下载功能。需要说明地是,对于内容较小的文件,可通过直接将文件内容写入请求body中或者直接从响应body中读取。 本文只讨论当文件内容过大,直接读取或者写入有OOM风险时的大文件上传和下载功能。

连接池配置

连接的创建和销毁通常比较消耗资源,为了提升高并发下场景下的通信效率,HttpClient会自动使用连接池来管理与服务端的长连接

指标统计

HttpClient提供了IO线程池及连接池的Metric指标统计,使用时通过HttpClient实例便可直接获取。


Last modified February 18, 2022: complete document migration (#126) (1375641)