聊聊JerseyEurekaHttpClient的参数
序
本文主要研究一下JerseyEurekaHttpClient的参数
JerseyEurekaHttpClientFactory
eureka-client-1.8.8-sources.jar!/com/netflix/discovery/shared/transport/jersey/JerseyEurekaHttpClientFactory.java
private JerseyEurekaHttpClientFactory buildLegacy(Map<String, String> additionalHeaders, boolean systemSSL) {
EurekaJerseyClientBuilder clientBuilder = new EurekaJerseyClientBuilder()
.withClientName(clientName)
.withUserAgent("Java-EurekaClient")
.withConnectionTimeout(connectionTimeout)
.withReadTimeout(readTimeout)
.withMaxConnectionsPerHost(maxConnectionsPerHost)
.withMaxTotalConnections(maxTotalConnections)
.withConnectionIdleTimeout((int) connectionIdleTimeout)
.withEncoderWrapper(encoderWrapper)
.withDecoderWrapper(decoderWrapper);
if (systemSSL) {
clientBuilder.withSystemSSLConfiguration();
} else if (sslContext != null) {
clientBuilder.withCustomSSL(sslContext);
}
if (hostnameVerifier != null) {
clientBuilder.withHostnameVerifier(hostnameVerifier);
}
EurekaJerseyClient jerseyClient = clientBuilder.build();
ApacheHttpClient4 discoveryApacheClient = jerseyClient.getClient();
addFilters(discoveryApacheClient);
return new JerseyEurekaHttpClientFactory(jerseyClient, additionalHeaders);
}
这里开业看到build的时候,指定了connectionTimeout、readTimeout、maxConnectionsPerHost、maxTotalConnections、connectionIdleTimeout参数。
EurekaJerseyClientImpl
eureka-client-1.8.8-sources.jar!/com/netflix/discovery/shared/transport/jersey/EurekaJerseyClientImpl.java
public EurekaJerseyClientImpl(int connectionTimeout, int readTimeout, final int connectionIdleTimeout,
ClientConfig clientConfig) {
try {
jerseyClientConfig = clientConfig;
apacheHttpClient = ApacheHttpClient4.create(jerseyClientConfig);
HttpParams params = apacheHttpClient.getClientHandler().getHttpClient().getParams();
HttpConnectionParams.setConnectionTimeout(params, connectionTimeout);
HttpConnectionParams.setSoTimeout(params, readTimeout);
this.apacheHttpClientConnectionCleaner = new ApacheHttpClientConnectionCleaner(apacheHttpClient, connectionIdleTimeout);
} catch (Throwable e) {
throw new RuntimeException("Cannot create Jersey client", e);
}
}
public EurekaJerseyClient build() {
MyDefaultApacheHttpClient4Config config = new MyDefaultApacheHttpClient4Config();
try {
return new EurekaJerseyClientImpl(connectionTimeout, readTimeout, connectionIdleTimeout, config);
} catch (Throwable e) {
throw new RuntimeException("Cannot create Jersey client ", e);
}
}
class MyDefaultApacheHttpClient4Config extends DefaultApacheHttpClient4Config {
MyDefaultApacheHttpClient4Config() {
MonitoredConnectionManager cm;
if (systemSSL) {
cm = createSystemSslCM();
} else if (sslContext != null || hostnameVerifier != null || trustStoreFileName != null) {
cm = createCustomSslCM();
} else {
cm = createDefaultSslCM();
}
if (proxyHost != null) {
addProxyConfiguration(cm);
}
DiscoveryJerseyProvider discoveryJerseyProvider = new DiscoveryJerseyProvider(encoderWrapper, decoderWrapper);
getSingletons().add(discoveryJerseyProvider);
// Common properties to all clients
cm.setDefaultMaxPerRoute(maxConnectionsPerHost);
cm.setMaxTotal(maxTotalConnections);
getProperties().put(ApacheHttpClient4Config.PROPERTY_CONNECTION_MANAGER, cm);
String fullUserAgentName = (userAgent == null ? clientName : userAgent) + "/v" + buildVersion();
getProperties().put(CoreProtocolPNames.USER_AGENT, fullUserAgentName);
// To pin a client to specific server in case redirect happens, we handle redirects directly
// (see DiscoveryClient.makeRemoteCall methods).
getProperties().put(PROPERTY_FOLLOW_REDIRECTS, Boolean.FALSE);
getProperties().put(ClientPNames.HANDLE_REDIRECTS, Boolean.FALSE);
}
//......
}
其中可以看到maxConnectionsPerHost以及maxTotalConnections是配置在MonitoredConnectionManager;而connectionTimeout、readTimeout、connectionIdleTimeout则是配置在apache http client的HttpConnectionParams上。
参数配置
eureka-client-1.8.8-sources.jar!/com/netflix/discovery/shared/transport/EurekaClientFactoryBuilder.java
public B withClientConfig(EurekaClientConfig clientConfig) {
withClientAccept(EurekaAccept.fromString(clientConfig.getClientDataAccept()));
withAllowRedirect(clientConfig.allowRedirects());
withConnectionTimeout(clientConfig.getEurekaServerConnectTimeoutSeconds() * 1000);
withReadTimeout(clientConfig.getEurekaServerReadTimeoutSeconds() * 1000);
withMaxConnectionsPerHost(clientConfig.getEurekaServerTotalConnectionsPerHost());
withMaxTotalConnections(clientConfig.getEurekaServerTotalConnections());
withConnectionIdleTimeout(clientConfig.getEurekaConnectionIdleTimeoutSeconds() * 1000);
withEncoder(clientConfig.getEncoderName());
return withDecoder(clientConfig.getDecoderName(), clientConfig.getClientDataAccept());
}
可以看到这里从EurekaClientConfig读取,其映射关系如下:
属性 |
配置 |
默认值 |
说明 |
---|---|---|---|
connectionTimeout |
eureka.client.eureka-server-connect-timeout-seconds |
5 |
Indicates how long to wait (in seconds) before a connection to eureka server needs to timeout. Note that the connections in the client are pooled by org.apache.http.client.HttpClient and this setting affects the actual connection creation and also the wait time to get the connection from the pool. |
readTimeout |
eureka.client.eureka-server-read-timeout-seconds |
8 |
Indicates how long to wait (in seconds) before a read from eureka server needs to timeout. |
maxConnectionsPerHost |
eureka.client.eureka-server-total-connections-per-host |
50 |
Gets the total number of connections that is allowed from eureka client to a eureka server host. |
maxTotalConnections |
eureka.client.eureka-server-total-connections |
200 |
Gets the total number of connections that is allowed from eureka client to all eureka servers. |
connectionIdleTimeout |
eureka.client.eureka-connection-idle-timeout-seconds |
30 |
Indicates how much time (in seconds) that the HTTP connections to eureka server can stay idle before it can be closed. In the AWS environment, it is recommended that the values is 30 seconds or less, since the firewall cleans up the connection information after a few mins leaving the connection hanging in limbo |
小结
可以通过eureka-server-connect-timeout-seconds、eureka-server-read-timeout-seconds、eureka-server-total-connections-per-host、eureka-server-total-connections、eureka-connection-idle-timeout-seconds参数来配置及管理eureka client请求eureka server的http连接。
doc
- EurekaJerseyClientImpl
- beagle MONO 应用的desktop search
- Python3与OpenCV3.3 图像处理(一)-环境搭建与简单DEMO
- winform中利用正则表达式得到有效的电话/手机号
- 浅述RDF,畅想一下FOAF应用
- 数据源控件参数类Parameter
- 我们来继续研究 mybatis 框架sql映射文件的属性
- 开源.NET邮件服务器
- 次次获得《头脑王者》满分的秘诀
- 如何在ASP.NET 2.0中定制Expression Builders
- codeproject 几篇asp.net文章
- .NET Web 自动化测试工具
- Javascript数组常用方法[包含MS AJAX.NET的prototype扩展方法]示例
- 10步骤优化SQL Server 数据库性能
- 漫谈语音合成之Char2Wav模型
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在 ASP.NET Core 中修改配置文件后自动加载新的配置
- 使用 frp 安全的暴露内网服务
- 在 .NET Core 应用中使用 NHibernate
- 使用 DataX 增量同步数据
- 在虚拟目录中部署 ASP.NET Core 应用
- Docker 容器的健康检查
- 使用 mono 编译 .NET Standard 应用
- 指定 ASP.NET Core 应用监听的端口
- 发布 Angular 应用至生产环境
- 在 NHibernate 中使用 Snow Flake ID
- 在 Angular 应用中创建包含组件
- PostgreSQL 数据库中的窗口函数
- 代码整洁的 JavaScript
- Script 标记的 defer 和 async 属性说明
- 百行代码轻松爬取视频