选项配置
概述
Solpic
支持灵活的选项配置,由HttpOption
接口定义,所有支持的选择都以常量的形式定义在HttpOptions
中。目前支持GLOBAL
、CLIENT
和REQUEST
三种等级选项。
使用选项
Solpic
在加载选项的值的时候会优先选用使用者配置的值,次选通过属性key
配置的值(通过System#setProperty()
设置,然后通过System#getProperty()
获取字符串值转换为目标类型值),最后会选用默认值。通过HttpRequest
获取选项配置值的时候,如果等级为CLIENT
则会尝试从可以在使用Builder
模式创建HttpClient
或者HttpRequest
的时候配置所需的选项,例如:
// 设置客户端级别选项
HttpClient httpClient = Solpic.newHttpClientBuilder()
.type(HttpClientType.DEFAULT)
.option(HttpOptions.HTTP_ENABLE_EXECUTE_TRACING, true)
.option(HttpOptions.HTTP_CHUNK_SIZE, 4096)
.build();
// 设置请求级别选项
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/get"))
.method(HttpMethod.GET)
.option(HttpOptions.HTTP_REQUEST_CHUNK_SIZE, 4096)
.option(HttpOptions.HTTP_REQUEST_CONNECT_TIMEOUT, 10000)
.build();
2
3
4
5
6
7
8
9
10
11
12
13
14
选项支持矩阵
选项 \ 客户端类型 | default | jhc | ahc5 | okhttp | ahc4 |
---|---|---|---|---|---|
HTTP_CLIENT_TYPE | - | - | - | - | - |
HTTP_CLIENT_ID | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_PROTOCOL_VERSION | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_THREAD_POOL | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_SCHEDULED_THREAD_POOL | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_SSL_CONFIG | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_PROXY | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_ENABLE_LOGGING | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_ENABLE_EXECUTE_PROFILE | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_ENABLE_EXECUTE_TRACING | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_FORCE_WRITE | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_RESPONSE_COPY_ATTACHMENTS | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_CLIENT_METRICS | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_CLIENT_ENABLE_CONNECTION_POOL | ❌ | ✅ | ✅ | ✅ | ✅ |
HTTP_CLIENT_CONNECTION_POOL_CAPACITY | ❌ | ✅ | ✅ | ✅ | ✅ |
HTTP_CLIENT_CONNECTION_TTL | ❌ | ✅ | ✅ | ✅ | ✅ |
HTTP_CONNECT_TIMEOUT | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_REQUEST_CONNECT_TIMEOUT | ✅ | ❌ | ❌ | ❌ | ✅ |
HTTP_SOCKET_TIMEOUT | ❌ | ❌ | ✅ | ❌ | ✅ |
HTTP_REQUEST_SOCKET_TIMEOUT | ❌ | ❌ | ❌ | ❌ | ✅ |
HTTP_READ_TIMEOUT | ✅ | ❌ | ❌ | ✅ | ❌ |
HTTP_WRITE_TIMEOUT | ❌ | ❌ | ❌ | ✅ | ❌ |
HTTP_TIMEOUT | ❌ | ✅ | ❌ | ❌ | ❌ |
HTTP_CHUNK_SIZE | ✅ | ❌ | ❌ | ❌ | ❌ |
HTTP_REQUEST_FORCE_WRITE | ✅ | ✅ | ✅ | ✅ | ✅ |
HTTP_REQUEST_CHUNK_SIZE | ✅ | ❌ | ❌ | ❌ | ❌ |
HTTP_REQUEST_READ_TIMEOUT | ✅ | ❌ | ❌ | ❌ | ❌ |
HTTP_REQUEST_TIMEOUT | ❌ | ✅ | ❌ | ❌ | ❌ |
HTTP_CONNECTION_REQUEST_TIMEOUT | ❌ | ❌ | ✅ | ❌ | ✅ |
HTTP_REQUEST_CONNECTION_REQUEST_TIMEOUT | ❌ | ❌ | ✅ | ❌ | ✅ |
HTTP_RESPONSE_TIMEOUT | ❌ | ❌ | ✅ | ❌ | ❌ |
HTTP_REQUEST_RESPONSE_TIMEOUT | ❌ | ❌ | ✅ | ❌ | ❌ |
HTTP_CONNECTION_KEEPALIVE | ❌ | ❌ | ✅ | ❌ | ❌ |
HTTP_REQUEST_CONNECTION_KEEPALIVE | ❌ | ❌ | ✅ | ❌ | ❌ |
TIP
这里再次提示一下客户端类型编码和对应的实现:
- default:实现类
DefaultHttpClient
,基于HttpURLConnection
实现 - jhc:实现类
JdkHttpClientImpl
,基于JDK11+
的java.net.http.HttpClient
实现 - ahc5:实现类
ApacheHttpClientV5Impl
,需要引入org.apache.httpcomponents.client5:httpclient5:$version
- okhttp:实现类
OkHttpClientImpl
,需要引入com.squareup.okhttp3:okhttp:$version
- ahc4:实现类
ApacheHttpClientV4Impl
,需要引入org.apache.httpcomponents:httpclient:$version
选项列表
所有支持的选项都在HttpOptions
中作为常量定义。
HTTP_CLIENT_TYPE
用于创建HttpClient
时指定客户端类型。
- id:
1L << 0
- 唯一标识:
HTTP_CLIENT_TYPE
- 等级:
GLOBAL
- 属性 key:
solpic.http.client.type
- 默认值:
default
HTTP_CLIENT_ID
用于创建HttpClient
时指定客户端的唯一标识。
- id:
1L << 1
- 唯一标识:
HTTP_CLIENT_ID
- 等级:
CLIENT
- 属性 key:
solpic.http.client.id
- 默认值:
NULL
- 支持客户端类型:
ALL
HTTP_PROTOCOL_VERSION
用于创建HttpClient
时指定客户端的HTTP
协议版本,此选项目前暂时没有任何作用。
- id:
1L << 2
- 唯一标识:
HTTP_PROTOCOL_VERSION
- 等级:
CLIENT
- 属性 key:
solpic.http.protocol.version
- 默认值:
HttpVersion.HTTP_1_1
- 支持客户端类型:
ALL
HTTP_THREAD_POOL
用于创建HttpClient
时指定客户端的线程池。
- id:
1L << 3
- 唯一标识:
HTTP_THREAD_POOL
- 等级:
CLIENT
- 属性 key:
solpic.http.thread.pool
- 默认值:
default
- 支持客户端类型:
ALL
HTTP_SCHEDULED_THREAD_POOL
用于创建HttpClient
时指定客户端的调度线程池。
- id:
1L << 4
- 唯一标识:
HTTP_SCHEDULED_THREAD_POOL
- 等级:
CLIENT
- 属性 key:
solpic.http.scheduled.thread.pool
- 默认值:
default
- 支持客户端类型:
ALL
HTTP_SSL_CONFIG
用于创建HttpClient
时指定底层客户端初始化时的SSL
配置。
- id:
1L << 5
- 唯一标识:
HTTP_SSL_CONFIG
- 等级:
CLIENT
- 默认值:
SSLConfig.NO
- 支持客户端类型:
ALL
HTTP_PROXY
用于创建HttpClient
时指定代理地址,仅支持java.net.Proxy.Type.HTTP
类型的代理。
- id:
1L << 6
- 唯一标识:
HTTP_PROXY
- 等级:
CLIENT
- 属性 key:
solpic.http.proxy
- 默认值:
ProxyConfig.NO
- 支持客户端类型:
ALL
HTTP_ENABLE_LOGGING
用于开启日志打印。
- id:
1L << 7
- 唯一标识:
HTTP_ENABLE_LOGGING
- 等级:
CLIENT
- 属性 key:
solpic.http.enable.logging
- 默认值:
false
- 支持客户端类型:
ALL
HTTP_ENABLE_EXECUTE_PROFILE
用于开启请求耗时统计。
- id:
1L << 8
- 唯一标识:
HTTP_ENABLE_EXECUTE_PROFILE
- 等级:
CLIENT
- 属性 key:
solpic.http.enable.execute.profile
- 默认值:
false
- 支持客户端类型:
ALL
HTTP_ENABLE_EXECUTE_TRACING
用于开启添加请求traceId
。
- id:
1L << 9
- 唯一标识:
HTTP_ENABLE_EXECUTE_TRACING
- 等级:
CLIENT
- 属性 key:
solpic.http.enable.execute.tracing
- 默认值:
false
- 支持客户端类型:
ALL
HTTP_FORCE_WRITE
用于开启客户端级别的强制设置请求有效载荷功能,有些请求方法例如GET
不支持设置请求体,可以启用此选项强制为GET
请求设置请求体。
- id:
1L << 10
- 唯一标识:
HTTP_FORCE_WRITE
- 等级:
CLIENT
- 属性 key:
solpic.http.force.write
- 默认值:
false
- 支持客户端类型:
ALL
HTTP_RESPONSE_COPY_ATTACHMENTS
用于开启把请求中的所有附件拷贝到响应中。
- id:
1L << 11
- 唯一标识:
HTTP_RESPONSE_COPY_ATTACHMENTS
- 等级:
CLIENT
- 属性 key:
solpic.http.response.copy.attachments
- 默认值:
true
- 支持客户端类型:
ALL
HTTP_CLIENT_METRICS
用于开启客户端调用指标统计。
- id:
1L << 12
- 唯一标识:
HTTP_CLIENT_METRICS
- 等级:
CLIENT
- 属性 key:
solpic.http.client.metrics
- 默认值:
false
- 支持客户端类型:
ALL
HTTP_CLIENT_ENABLE_CONNECTION_POOL
用于开启客户端的连接池功能。
- id:
1L << 13
- 唯一标识:
HTTP_CLIENT_ENABLE_CONNECTION_POOL
- 等级:
CLIENT
- 属性 key:
solpic.http.client.enable.connection.pool
- 默认值:
false
- 支持客户端类型:除了
default
以外都支持,因为HttpURLConnection
不支持配置连接池
HTTP_CLIENT_CONNECTION_POOL_CAPACITY
用于设置客户端的连接池的最大容量。
- id:
1L << 14
- 唯一标识:
HTTP_CLIENT_CONNECTION_POOL_CAPACITY
- 等级:
CLIENT
- 属性 key:
solpic.http.client.connection.pool.capacity
- 默认值:
128
- 支持客户端类型:除了
default
以外都支持,因为HttpURLConnection
不支持配置连接池
HTTP_CLIENT_CONNECTION_TTL
用于设置客户端的连接池中连接的最大存活周期,单位为毫米。
- id:
1L << 15
- 唯一标识:
HTTP_CLIENT_CONNECTION_TTL
- 等级:
CLIENT
- 属性 key:
solpic.http.client.connection.ttl
- 默认值:
1800000
- 支持客户端类型:除了
default
以外都支持,因为HttpURLConnection
不支持配置连接池
HTTP_CONNECT_TIMEOUT
用于设置客户端的连接超时时间,单位为毫秒。
- id:
1L << 16
- 唯一标识:
HTTP_CONNECT_TIMEOUT
- 等级:
CLIENT
- 属性 key:
solpic.http.connect.timeout
- 默认值:
5000
- 支持客户端类型:
ALL
HTTP_REQUEST_CONNECT_TIMEOUT
用于设置请求的连接超时时间,单位为毫秒。
- id:
1L << 17
- 唯一标识:
HTTP_REQUEST_CONNECT_TIMEOUT
- 等级:
REQUEST
- 属性 key:
solpic.http.request.connect.timeout
- 默认值:
5000
- 支持客户端类型:
default
、ahc4
HTTP_SOCKET_TIMEOUT
用于设置客户端的socket
超时时间,单位为毫秒。
- id:
1L << 18
- 唯一标识:
HTTP_SOCKET_TIMEOUT
- 等级:
CLIENT
- 属性 key:
solpic.http.socket.timeout
- 默认值:
5000
- 支持客户端类型:
ahc5
、ahc4
HTTP_REQUEST_SOCKET_TIMEOUT
用于设置请求的socket
超时时间,单位为毫秒。
- id:
1L << 19
- 唯一标识:
HTTP_REQUEST_SOCKET_TIMEOUT
- 等级:
REQUEST
- 属性 key:
solpic.http.request.socket.timeout
- 默认值:
5000
- 支持客户端类型:
ahc4
HTTP_READ_TIMEOUT
用于设置客户端的读超时时间,单位为毫秒。
- id:
1L << 20
- 唯一标识:
HTTP_READ_TIMEOUT
- 等级:
CLIENT
- 属性 key:
solpic.http.read.timeout
- 默认值:
5000
- 支持客户端类型:
default
、okhttp
HTTP_WRITE_TIMEOUT
用于设置客户端的写超时时间,单位为毫秒。
- id:
1L << 21
- 唯一标识:
HTTP_WRITE_TIMEOUT
- 等级:
CLIENT
- 属性 key:
solpic.http.write.timeout
- 默认值:
5000
- 支持客户端类型:
okhttp
HTTP_TIMEOUT
用于设置客户端的调用超时时间,单位为毫秒。
- id:
1L << 22
- 唯一标识:
HTTP_TIMEOUT
- 等级:
CLIENT
- 属性 key:
solpic.http.timeout
- 默认值:
5000
- 支持客户端类型:
jhc
HTTP_CHUNK_SIZE
用于设置客户端级别的chunkSize
。
- id:
1L << 23
- 唯一标识:
HTTP_CHUNK_SIZE
- 等级:
CLIENT
- 属性 key:
solpic.http.chunk.size
- 默认值:
4096
- 支持客户端类型:
default
HTTP_REQUEST_FORCE_WRITE
用于开启请求级别的强制设置请求有效载荷功能,有些请求方法例如GET
不支持设置请求体,可以启用此选项强制为GET
请求设置请求体。
- id:
1L << 24
- 唯一标识:
HTTP_REQUEST_FORCE_WRITE
- 等级:
REQUEST
- 属性 key:
solpic.http.request.force.write
- 默认值:
false
- 支持客户端类型:
ALL
HTTP_REQUEST_CHUNK_SIZE
用于设置请求级别的chunkSize
。
- id:
1L << 25
- 唯一标识:
HTTP_REQUEST_CHUNK_SIZE
- 等级:
REQUEST
- 属性 key:
solpic.http.request.chunk.size
- 默认值:
4096
- 支持客户端类型:
default
HTTP_REQUEST_READ_TIMEOUT
用于设置请求级别的读超时时间,单位为毫秒。
- id:
1L << 26
- 唯一标识:
HTTP_REQUEST_READ_TIMEOUT
- 等级:
REQUEST
- 属性 key:
solpic.http.request.read.timeout
- 默认值:
5000
- 支持客户端类型:
default
HTTP_REQUEST_TIMEOUT
用于设置请求级别的调用超时时间,单位为毫秒。
- id:
1L << 27
- 唯一标识:
HTTP_REQUEST_TIMEOUT
- 等级:
REQUEST
- 属性 key:
solpic.http.request.timeout
- 默认值:
5000
- 支持客户端类型:
jhc
HTTP_CONNECTION_REQUEST_TIMEOUT
用于设置客户端级别的连接请求超时时间,单位为毫秒。
- id:
1L << 28
- 唯一标识:
HTTP_CONNECTION_REQUEST_TIMEOUT
- 等级:
CLIENT
- 属性 key:
solpic.http.connection.request.timeout
- 默认值:
5000
- 支持客户端类型:
ahc5
、ahc4
HTTP_REQUEST_CONNECTION_REQUEST_TIMEOUT
用于设置请求级别的连接请求超时时间,单位为毫秒。
- id:
1L << 29
- 唯一标识:
HTTP_REQUEST_CONNECTION_REQUEST_TIMEOUT
- 等级:
REQUEST
- 属性 key:
solpic.http.request.connection.request.timeout
- 默认值:
5000
- 支持客户端类型:
ahc5
、ahc4
HTTP_RESPONSE_TIMEOUT
用于设置客户端级别的响应超时时间,单位为毫秒。
- id:
1L << 30
- 唯一标识:
HTTP_RESPONSE_TIMEOUT
- 等级:
CLIENT
- 属性 key:
solpic.http.response.timeout
- 默认值:
5000
- 支持客户端类型:
ahc5
HTTP_REQUEST_RESPONSE_TIMEOUT
用于设置请求级别的响应超时时间,单位为毫秒。
- id:
1L << 31
- 唯一标识:
HTTP_REQUEST_RESPONSE_TIMEOUT
- 等级:
REQUEST
- 属性 key:
solpic.http.request.response.timeout
- 默认值:
5000
- 支持客户端类型:
ahc5
HTTP_CONNECTION_KEEPALIVE
用于设置客户端级别的连接keepalive
周期,单位为毫秒。
- id:
1L << 32
- 唯一标识:
HTTP_CONNECTION_KEEPALIVE
- 等级:
CLIENT
- 属性 key:
solpic.http.connection.keepalive
- 默认值:
180000
- 支持客户端类型:
ahc5
HTTP_REQUEST_CONNECTION_KEEPALIVE
用于设置请求级别的连接keepalive
周期,单位为毫秒。
- id:
1L << 33
- 唯一标识:
HTTP_REQUEST_CONNECTION_KEEPALIVE
- 等级:
REQUEST
- 属性 key:
solpic.http.request.connection.keepalive
- 默认值:
180000
- 支持客户端类型:
ahc5