public class MultiHostOkHttpClient
extends java.lang.Object
支持均衡负载的OkHttpClient(简单的示例模板, 建议自行实现)
Java:
LoadBalancedHostManager hostManager = new LoadBalancedHostManager()
.setHostArray(new String[]{
"http://127.0.0.1:8080",
"http://127.0.0.1:8081"
});
LoadBalancedInspectManager inspectManager = new LoadBalancedInspectManager()
.setHostManager(hostManager)
.setInspectInterval(5000L)
.setInspector(new TelnetLoadBalanceInspector());
MultiHostOkHttpClient client = new MultiHostOkHttpClient()
.setHostManager(hostManager)
.setMaxThreads(256)
.setMaxThreadsPerHost(256)
.setPassiveBlockDuration(30000L)
.setConnectTimeout(3000L)
.setWriteTimeout(10000L)
.setReadTimeout(10000L);
Spring MVC: 注册了SlateServletContextListener的场合
<bean id="loadBalancedHostManager" class="sviolet.slate.common.x.net.loadbalance.LoadBalancedHostManager">
<property name="hosts" value="http://127.0.0.1:8081,http://127.0.0.1:8082"/>
</bean>
<bean id="loadBalancedInspector" class="sviolet.slate.common.x.net.loadbalance.LoadBalancedInspectManager">
<property name="hostManager" ref="loadBalancedHostManager"/>
<property name="inspectInterval" value="5000"/>
</bean>
<bean id="multiHostOkHttpClient" class="sviolet.slate.common.x.net.loadbalance.classic.MultiHostOkHttpClient">
<property name="hostManager" ref="loadBalancedHostManager"/>
<property name="maxThreads" value="256"/>
<property name="maxThreadsPerHost" value="256"/>
<property name="passiveBlockDuration" value="30000"/>
<property name="connectTimeout" value="3000"/>
<property name="writeTimeout" value="10000"/>
<property name="readTimeout" value="10000"/>
</bean>
Spring MVC: 没注册SlateServletContextListener的场合, 需要设置destroy-method="close"
<bean id="loadBalancedHostManager" class="sviolet.slate.common.x.net.loadbalance.LoadBalancedHostManager">
<property name="hosts" value="http://127.0.0.1:8081,http://127.0.0.1:8082"/>
</bean>
<bean id="loadBalancedInspector" class="sviolet.slate.common.x.net.loadbalance.LoadBalancedInspectManager"
destroy-method="close">
<property name="hostManager" ref="loadBalancedHostManager"/>
<property name="inspectInterval" value="5000"/>
</bean>
<bean id="multiHostOkHttpClient" class="sviolet.slate.common.x.net.loadbalance.classic.MultiHostOkHttpClient">
<property name="hostManager" ref="loadBalancedHostManager"/>
<property name="maxThreads" value="256"/>
<property name="maxThreadsPerHost" value="256"/>
<property name="passiveBlockDuration" value="30000"/>
<property name="connectTimeout" value="3000"/>
<property name="writeTimeout" value="10000"/>
<property name="readTimeout" value="10000"/>
</bean>
| 限定符和类型 | 类和说明 |
|---|---|
static class |
MultiHostOkHttpClient.BeanCallback<T>
请求回调(获得JavaBean响应体)
|
static class |
MultiHostOkHttpClient.BytesCallback
请求回调(获得byte[]响应体)
|
static class |
MultiHostOkHttpClient.InputStreamCallback
请求回调(获得InputStream响应体)
|
static class |
MultiHostOkHttpClient.Request
请求(该对象非线程安全, 请勿多线程操作同一个对象)
|
static class |
MultiHostOkHttpClient.ResponsePackage
响应包
|
static class |
MultiHostOkHttpClient.ResponsePackageCallback
请求回调(通用)
|
static class |
MultiHostOkHttpClient.Settings
客户端配置
|
static class |
MultiHostOkHttpClient.Stub
持有该对象可以发起请求取消操作(异步)
|
| 限定符和类型 | 字段和说明 |
|---|---|
static int |
LOG_CONFIG_ALL |
static int |
LOG_CONFIG_BLOCK |
static int |
LOG_CONFIG_DEFAULT |
static int |
LOG_CONFIG_NONE |
static int |
LOG_CONFIG_REAL_URL |
static int |
VERBOSE_LOG_CONFIG_ALL |
static int |
VERBOSE_LOG_CONFIG_DEFAULT |
static int |
VERBOSE_LOG_CONFIG_NONE |
static int |
VERBOSE_LOG_CONFIG_RAW_URL |
static int |
VERBOSE_LOG_CONFIG_REQUEST_INPUTS |
static int |
VERBOSE_LOG_CONFIG_REQUEST_STRING_BODY |
static int |
VERBOSE_LOG_CONFIG_RESPONSE_CODE |
| 构造器和说明 |
|---|
MultiHostOkHttpClient() |
| 限定符和类型 | 方法和说明 |
|---|---|
protected okhttp3.Request |
buildGetRequest(java.lang.String url,
MultiHostOkHttpClient.Request request,
MultiHostOkHttpClient.Settings settings)
根据URL和报文体组GET请求(复写本方法实现自定义的逻辑)
|
protected okhttp3.Request |
buildPostRequest(java.lang.String url,
MultiHostOkHttpClient.Request request,
MultiHostOkHttpClient.Settings settings)
根据URL和报文体组POST请求(复写本方法实现自定义的逻辑)
|
protected okhttp3.OkHttpClient |
createOkHttpClient(MultiHostOkHttpClient.Settings settings)
初始化OkHttpClient实例(复写本方法实现自定义的逻辑)
|
MultiHostOkHttpClient.Request |
get(java.lang.String urlSuffix)
创建GET请求, 请求创建过程非线程安全, 请勿多线程操作同一个请求
https://github.com/shepherdviolet/slate/blob/master/docs/loadbalance/invoke-sync.md
https://github.com/shepherdviolet/slate/blob/master/docs/loadbalance/invoke-async.md
|
java.lang.String |
getTag() |
protected boolean |
isSucceed(okhttp3.Response response)
判断HTTP请求是否成功, 返回true成功
|
protected boolean |
needBlock(java.lang.Throwable t,
MultiHostOkHttpClient.Settings settings)
判断该异常是否需要阻断后端, 返回true阻断
|
MultiHostOkHttpClient.Request |
post(java.lang.String urlSuffix)
创建POST请求, 请求创建过程非线程安全, 请勿多线程操作同一个请求
https://github.com/shepherdviolet/slate/blob/master/docs/loadbalance/invoke-sync.md
https://github.com/shepherdviolet/slate/blob/master/docs/loadbalance/invoke-async.md
|
MultiHostOkHttpClient |
setConnectTimeout(long connectTimeout)
[可运行时修改]
设置连接超时ms
|
MultiHostOkHttpClient |
setCookieJar(okhttp3.CookieJar cookieJar)
[可运行时修改]
CookieJar
|
MultiHostOkHttpClient |
setDataConverter(DataConverter dataConverter)
[可运行时修改]
[配置]数据转换器, 用于将beanBody设置的JavaBean转换为byte[], 和将返回报文byte[]转换为JavaBean
|
MultiHostOkHttpClient |
setDns(okhttp3.Dns dns)
[可运行时修改]
Dns
|
MultiHostOkHttpClient |
setEncode(java.lang.String encode)
[可运行时修改]
设置编码
|
MultiHostOkHttpClient |
setHeaders(java.util.Map<java.lang.String,java.lang.String> headers)
[可运行时修改]
设置HTTP请求头参数
|
MultiHostOkHttpClient |
setHostManager(sviolet.slate.common.x.net.loadbalance.LoadBalancedHostManager hostManager)
设置远端管理器(必须)
|
MultiHostOkHttpClient |
setHttpCodeNeedBlock(java.lang.String codes)
[可运行时修改]
当HTTP返回码为指定返回码时, 阻断后端
|
MultiHostOkHttpClient |
setLogConfig(int logConfig)
|
MultiHostOkHttpClient |
setMaxIdleConnections(int maxIdleConnections)
[可运行时修改]
最大闲置连接数.
|
MultiHostOkHttpClient |
setMaxReadLength(long maxReadLength)
[可运行时修改]
设置最大读取数据长度(默认:10M)
|
MultiHostOkHttpClient |
setMaxThreads(int maxThreads)
[可运行时修改]
最大请求线程数(仅异步请求时有效)
|
MultiHostOkHttpClient |
setMaxThreadsPerHost(int maxThreadsPerHost)
[可运行时修改]
对应每个后端的最大请求线程数(仅异步请求时有效)
|
MultiHostOkHttpClient |
setMediaType(java.lang.String mediaType)
[可运行时修改]
设置MediaType
|
MultiHostOkHttpClient |
setPassiveBlockDuration(long passiveBlockDuration)
[可运行时修改]
[配置]设置被动检测到网络故障时阻断后端的时间
当请求服务端时, 发生特定的异常或返回特定的响应码(MultiHostOkHttpClient.needBlock方法决定), 客户端会将该
后端服务器的IP/PORT标记为暂不可用状态, 阻断时长就是不可用的时长, 建议比主动探测器的探测间隔大.
|
MultiHostOkHttpClient |
setProxy(java.lang.String proxy)
[可运行时修改]
Proxy
|
MultiHostOkHttpClient |
setReadTimeout(long readTimeout)
[可运行时修改]
设置读数据超时ms
|
MultiHostOkHttpClient |
setRecoveryCoefficient(int recoveryCoefficient)
[可运行时修改]
设置阻断后的恢复期系数, 修复期时长 = blockDuration * recoveryCoefficient, 设置1则无恢复期
|
MultiHostOkHttpClient |
setRequestTraceEnabled(boolean requestTraceEnabled)
[可运行时修改]
true: 开启简易的请求日志追踪(请求日志追加4位数追踪号), 默认false
|
MultiHostOkHttpClient |
setSSLSocketFactory(javax.net.ssl.SSLSocketFactory sslSocketFactory)
[可运行时修改]
SSLSocketFactory
|
MultiHostOkHttpClient |
setTag(java.lang.String tag)
设置客户端的标识
|
MultiHostOkHttpClient |
setTxTimerEnabled(boolean enabled)
[可运行时修改]
启用/禁用TxTimer统计请求耗时(暂时只支持同步方式), 默认禁用
|
MultiHostOkHttpClient |
setVerboseLog(boolean verboseLog)
[可运行时修改]
true: INFO级别可打印更多的日志(请求报文/响应码等), 默认false
|
MultiHostOkHttpClient |
setVerboseLogConfig(int verboseLogConfig)
|
MultiHostOkHttpClient |
setWriteTimeout(long writeTimeout)
[可运行时修改]
设置写数据超时ms
|
java.lang.String |
toString() |
public static final int LOG_CONFIG_ALL
public static final int LOG_CONFIG_NONE
public static final int LOG_CONFIG_REAL_URL
public static final int LOG_CONFIG_BLOCK
public static final int LOG_CONFIG_DEFAULT
public static final int VERBOSE_LOG_CONFIG_ALL
public static final int VERBOSE_LOG_CONFIG_NONE
public static final int VERBOSE_LOG_CONFIG_REQUEST_INPUTS
public static final int VERBOSE_LOG_CONFIG_REQUEST_STRING_BODY
public static final int VERBOSE_LOG_CONFIG_RAW_URL
public static final int VERBOSE_LOG_CONFIG_RESPONSE_CODE
public static final int VERBOSE_LOG_CONFIG_DEFAULT
public MultiHostOkHttpClient.Request post(java.lang.String urlSuffix)
创建POST请求, 请求创建过程非线程安全, 请勿多线程操作同一个请求
https://github.com/shepherdviolet/slate/blob/master/docs/loadbalance/invoke-sync.md
https://github.com/shepherdviolet/slate/blob/master/docs/loadbalance/invoke-async.md
urlSuffix - 请求的url后缀, 例如/user/add.jsonpublic MultiHostOkHttpClient.Request get(java.lang.String urlSuffix)
创建GET请求, 请求创建过程非线程安全, 请勿多线程操作同一个请求
https://github.com/shepherdviolet/slate/blob/master/docs/loadbalance/invoke-sync.md
https://github.com/shepherdviolet/slate/blob/master/docs/loadbalance/invoke-async.md
urlSuffix - 请求的url后缀, 例如/user/add.jsonprotected okhttp3.OkHttpClient createOkHttpClient(MultiHostOkHttpClient.Settings settings)
protected okhttp3.Request buildPostRequest(java.lang.String url,
MultiHostOkHttpClient.Request request,
MultiHostOkHttpClient.Settings settings)
throws RequestBuildException
url - 由LoadBalancedHostManager选择出的远端url(前缀)request - 请求参数settings - 客户端配置RequestBuildException - 构建异常protected okhttp3.Request buildGetRequest(java.lang.String url,
MultiHostOkHttpClient.Request request,
MultiHostOkHttpClient.Settings settings)
throws RequestBuildException
url - 由LoadBalancedHostManager选择出的远端url(前缀)request - 请求参数settings - 客户端配置RequestBuildException - 构建异常protected boolean needBlock(java.lang.Throwable t,
MultiHostOkHttpClient.Settings settings)
protected boolean isSucceed(okhttp3.Response response)
public java.lang.String getTag()
public java.lang.String toString()
toString 在类中 java.lang.Objectpublic MultiHostOkHttpClient setHostManager(sviolet.slate.common.x.net.loadbalance.LoadBalancedHostManager hostManager)
hostManager - 远端管理器public MultiHostOkHttpClient setPassiveBlockDuration(long passiveBlockDuration)
[配置]设置被动检测到网络故障时阻断后端的时间
当请求服务端时, 发生特定的异常或返回特定的响应码(MultiHostOkHttpClient.needBlock方法决定), 客户端会将该 后端服务器的IP/PORT标记为暂不可用状态, 阻断时长就是不可用的时长, 建议比主动探测器的探测间隔大.
passiveBlockDuration - 阻断时长mspublic MultiHostOkHttpClient setMediaType(java.lang.String mediaType)
mediaType - 设置MediaTypepublic MultiHostOkHttpClient setEncode(java.lang.String encode)
encode - 编码public MultiHostOkHttpClient setHeaders(java.util.Map<java.lang.String,java.lang.String> headers)
headers - 请求头参数public MultiHostOkHttpClient setRecoveryCoefficient(int recoveryCoefficient)
recoveryCoefficient - 阻断后的恢复期系数, >= 1public MultiHostOkHttpClient setMaxIdleConnections(int maxIdleConnections)
maxIdleConnections - 最大闲置连接数, 默认16public MultiHostOkHttpClient setMaxThreads(int maxThreads)
maxThreads - 最大请求线程数, 默认256public MultiHostOkHttpClient setMaxThreadsPerHost(int maxThreadsPerHost)
maxThreadsPerHost - 对应每个后端的最大请求线程数, 默认256public MultiHostOkHttpClient setConnectTimeout(long connectTimeout)
connectTimeout - 连接超时mspublic MultiHostOkHttpClient setWriteTimeout(long writeTimeout)
writeTimeout - 写数据超时mspublic MultiHostOkHttpClient setReadTimeout(long readTimeout)
readTimeout - 读数据超时mspublic MultiHostOkHttpClient setMaxReadLength(long maxReadLength)
maxReadLength - 设置最大读取数据长度, 单位bytespublic MultiHostOkHttpClient setCookieJar(okhttp3.CookieJar cookieJar)
cookieJar - CookieJarpublic MultiHostOkHttpClient setProxy(java.lang.String proxy)
proxy - 例如127.0.0.1:8080java.lang.IllegalArgumentException - if the proxy string is invalidjava.lang.NumberFormatException - if the string does not contain a parsable integer.java.lang.SecurityException - if a security manager is present and permission to resolve the host name is denied.public MultiHostOkHttpClient setDns(okhttp3.Dns dns)
dns - Dnspublic MultiHostOkHttpClient setSSLSocketFactory(javax.net.ssl.SSLSocketFactory sslSocketFactory)
sslSocketFactory - SSLSocketFactorypublic MultiHostOkHttpClient setDataConverter(DataConverter dataConverter)
[配置]数据转换器, 用于将beanBody设置的JavaBean转换为byte[], 和将返回报文byte[]转换为JavaBean
public MultiHostOkHttpClient setHttpCodeNeedBlock(java.lang.String codes)
codes - 指定需要阻断的返回码, 例如:403,404public MultiHostOkHttpClient setTxTimerEnabled(boolean enabled)
public MultiHostOkHttpClient setTag(java.lang.String tag)
tag - 标识public MultiHostOkHttpClient setVerboseLog(boolean verboseLog)
verboseLog - true: INFO级别可打印更多的日志(请求报文/响应码等), 默认falsepublic MultiHostOkHttpClient setVerboseLogConfig(int verboseLogConfig)
verboseLogConfig - 详细配置public MultiHostOkHttpClient setLogConfig(int logConfig)
logConfig - 详细配置public MultiHostOkHttpClient setRequestTraceEnabled(boolean requestTraceEnabled)
requestTraceEnabled - true: 开启简易的请求日志追踪(请求日志追加4位数追踪号), 默认false