Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
spring-cloud-netflix
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
openSource
spring-cloud-netflix
Commits
dd978169
Unverified
Commit
dd978169
authored
Jan 09, 2018
by
Spencer Gibb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use new RibbonProperties consistently.
parent
ca81bdf7
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
299 additions
and
264 deletions
+299
-264
FeignLoadBalancer.java
...amework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java
+11
-9
RetryableFeignLoadBalancer.java
...loud/netflix/feign/ribbon/RetryableFeignLoadBalancer.java
+4
-5
DomainExtractingServerList.java
...oud/netflix/ribbon/eureka/DomainExtractingServerList.java
+6
-8
RibbonProperties.java
...pringframework/cloud/netflix/ribbon/RibbonProperties.java
+187
-0
RibbonUtils.java
...org/springframework/cloud/netflix/ribbon/RibbonUtils.java
+0
-97
HttpClientRibbonConfiguration.java
.../netflix/ribbon/apache/HttpClientRibbonConfiguration.java
+10
-29
RetryableRibbonLoadBalancingHttpClient.java
...ribbon/apache/RetryableRibbonLoadBalancingHttpClient.java
+31
-37
RibbonLoadBalancingHttpClient.java
.../netflix/ribbon/apache/RibbonLoadBalancingHttpClient.java
+12
-14
OkHttpLoadBalancingClient.java
...loud/netflix/ribbon/okhttp/OkHttpLoadBalancingClient.java
+14
-15
OkHttpRibbonConfiguration.java
...loud/netflix/ribbon/okhttp/OkHttpRibbonConfiguration.java
+12
-30
AbstractLoadBalancingClient.java
...d/netflix/ribbon/support/AbstractLoadBalancingClient.java
+12
-20
No files found.
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java
View file @
dd978169
...
@@ -28,6 +28,8 @@ import java.util.HashMap;
...
@@ -28,6 +28,8 @@ import java.util.HashMap;
import
java.util.LinkedHashMap
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
org.springframework.cloud.netflix.ribbon.RibbonProperties
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpMethod
;
import
org.springframework.http.HttpMethod
;
...
@@ -38,7 +40,6 @@ import com.netflix.client.ClientRequest;
...
@@ -38,7 +40,6 @@ import com.netflix.client.ClientRequest;
import
com.netflix.client.IResponse
;
import
com.netflix.client.IResponse
;
import
com.netflix.client.RequestSpecificRetryHandler
;
import
com.netflix.client.RequestSpecificRetryHandler
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.Server
;
...
@@ -54,6 +55,7 @@ import static org.springframework.cloud.netflix.ribbon.RibbonUtils.updateToSecur
...
@@ -54,6 +55,7 @@ import static org.springframework.cloud.netflix.ribbon.RibbonUtils.updateToSecur
public
class
FeignLoadBalancer
extends
public
class
FeignLoadBalancer
extends
AbstractLoadBalancerAwareClient
<
FeignLoadBalancer
.
RibbonRequest
,
FeignLoadBalancer
.
RibbonResponse
>
{
AbstractLoadBalancerAwareClient
<
FeignLoadBalancer
.
RibbonRequest
,
FeignLoadBalancer
.
RibbonResponse
>
{
private
final
RibbonProperties
ribbon
;
protected
int
connectTimeout
;
protected
int
connectTimeout
;
protected
int
readTimeout
;
protected
int
readTimeout
;
protected
IClientConfig
clientConfig
;
protected
IClientConfig
clientConfig
;
...
@@ -64,8 +66,10 @@ public class FeignLoadBalancer extends
...
@@ -64,8 +66,10 @@ public class FeignLoadBalancer extends
super
(
lb
,
clientConfig
);
super
(
lb
,
clientConfig
);
this
.
setRetryHandler
(
RetryHandler
.
DEFAULT
);
this
.
setRetryHandler
(
RetryHandler
.
DEFAULT
);
this
.
clientConfig
=
clientConfig
;
this
.
clientConfig
=
clientConfig
;
this
.
connectTimeout
=
clientConfig
.
get
(
CommonClientConfigKey
.
ConnectTimeout
);
this
.
ribbon
=
RibbonProperties
.
from
(
clientConfig
);
this
.
readTimeout
=
clientConfig
.
get
(
CommonClientConfigKey
.
ReadTimeout
);
RibbonProperties
ribbon
=
this
.
ribbon
;
this
.
connectTimeout
=
ribbon
.
getConnectTimeout
();
this
.
readTimeout
=
ribbon
.
getReadTimeout
();
this
.
serverIntrospector
=
serverIntrospector
;
this
.
serverIntrospector
=
serverIntrospector
;
}
}
...
@@ -74,11 +78,10 @@ public class FeignLoadBalancer extends
...
@@ -74,11 +78,10 @@ public class FeignLoadBalancer extends
throws
IOException
{
throws
IOException
{
Request
.
Options
options
;
Request
.
Options
options
;
if
(
configOverride
!=
null
)
{
if
(
configOverride
!=
null
)
{
RibbonProperties
override
=
RibbonProperties
.
from
(
configOverride
);
options
=
new
Request
.
Options
(
options
=
new
Request
.
Options
(
configOverride
.
get
(
CommonClientConfigKey
.
ConnectTimeout
,
override
.
connectTimeout
(
this
.
connectTimeout
),
this
.
connectTimeout
),
override
.
readTimeout
(
this
.
readTimeout
));
(
configOverride
.
get
(
CommonClientConfigKey
.
ReadTimeout
,
this
.
readTimeout
)));
}
}
else
{
else
{
options
=
new
Request
.
Options
(
this
.
connectTimeout
,
this
.
readTimeout
);
options
=
new
Request
.
Options
(
this
.
connectTimeout
,
this
.
readTimeout
);
...
@@ -90,8 +93,7 @@ public class FeignLoadBalancer extends
...
@@ -90,8 +93,7 @@ public class FeignLoadBalancer extends
@Override
@Override
public
RequestSpecificRetryHandler
getRequestSpecificRetryHandler
(
public
RequestSpecificRetryHandler
getRequestSpecificRetryHandler
(
RibbonRequest
request
,
IClientConfig
requestConfig
)
{
RibbonRequest
request
,
IClientConfig
requestConfig
)
{
if
(
this
.
clientConfig
.
get
(
CommonClientConfigKey
.
OkToRetryOnAllOperations
,
if
(
this
.
ribbon
.
isOkToRetryOnAllOperations
())
{
false
))
{
return
new
RequestSpecificRetryHandler
(
true
,
true
,
this
.
getRetryHandler
(),
return
new
RequestSpecificRetryHandler
(
true
,
true
,
this
.
getRetryHandler
(),
requestConfig
);
requestConfig
);
}
}
...
...
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/RetryableFeignLoadBalancer.java
View file @
dd978169
...
@@ -30,6 +30,7 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFact
...
@@ -30,6 +30,7 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFact
import
org.springframework.cloud.client.loadbalancer.RetryableStatusCodeException
;
import
org.springframework.cloud.client.loadbalancer.RetryableStatusCodeException
;
import
org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser
;
import
org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser
;
import
org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient
;
import
org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient
;
import
org.springframework.cloud.netflix.ribbon.RibbonProperties
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.retry.RetryCallback
;
import
org.springframework.retry.RetryCallback
;
import
org.springframework.retry.RetryContext
;
import
org.springframework.retry.RetryContext
;
...
@@ -39,7 +40,6 @@ import org.springframework.retry.policy.NeverRetryPolicy;
...
@@ -39,7 +40,6 @@ import org.springframework.retry.policy.NeverRetryPolicy;
import
org.springframework.retry.support.RetryTemplate
;
import
org.springframework.retry.support.RetryTemplate
;
import
com.netflix.client.DefaultLoadBalancerRetryHandler
;
import
com.netflix.client.DefaultLoadBalancerRetryHandler
;
import
com.netflix.client.RequestSpecificRetryHandler
;
import
com.netflix.client.RequestSpecificRetryHandler
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.Server
;
...
@@ -78,11 +78,10 @@ public class RetryableFeignLoadBalancer extends FeignLoadBalancer implements Ser
...
@@ -78,11 +78,10 @@ public class RetryableFeignLoadBalancer extends FeignLoadBalancer implements Ser
throws
IOException
{
throws
IOException
{
final
Request
.
Options
options
;
final
Request
.
Options
options
;
if
(
configOverride
!=
null
)
{
if
(
configOverride
!=
null
)
{
RibbonProperties
ribbon
=
RibbonProperties
.
from
(
configOverride
);
options
=
new
Request
.
Options
(
options
=
new
Request
.
Options
(
configOverride
.
get
(
CommonClientConfigKey
.
ConnectTimeout
,
ribbon
.
connectTimeout
(
this
.
connectTimeout
),
this
.
connectTimeout
),
ribbon
.
readTimeout
(
this
.
readTimeout
));
(
configOverride
.
get
(
CommonClientConfigKey
.
ReadTimeout
,
this
.
readTimeout
)));
}
}
else
{
else
{
options
=
new
Request
.
Options
(
this
.
connectTimeout
,
this
.
readTimeout
);
options
=
new
Request
.
Options
(
this
.
connectTimeout
,
this
.
readTimeout
);
...
...
spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerList.java
View file @
dd978169
...
@@ -19,8 +19,9 @@ package org.springframework.cloud.netflix.ribbon.eureka;
...
@@ -19,8 +19,9 @@ package org.springframework.cloud.netflix.ribbon.eureka;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
org.springframework.cloud.netflix.ribbon.RibbonProperties
;
import
com.netflix.appinfo.InstanceInfo
;
import
com.netflix.appinfo.InstanceInfo
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.ServerList
;
import
com.netflix.loadbalancer.ServerList
;
...
@@ -32,15 +33,14 @@ import com.netflix.niws.loadbalancer.DiscoveryEnabledServer;
...
@@ -32,15 +33,14 @@ import com.netflix.niws.loadbalancer.DiscoveryEnabledServer;
public
class
DomainExtractingServerList
implements
ServerList
<
DiscoveryEnabledServer
>
{
public
class
DomainExtractingServerList
implements
ServerList
<
DiscoveryEnabledServer
>
{
private
ServerList
<
DiscoveryEnabledServer
>
list
;
private
ServerList
<
DiscoveryEnabledServer
>
list
;
private
final
RibbonProperties
ribbon
;
private
IClientConfig
clientConfig
;
private
boolean
approximateZoneFromHostname
;
private
boolean
approximateZoneFromHostname
;
public
DomainExtractingServerList
(
ServerList
<
DiscoveryEnabledServer
>
list
,
public
DomainExtractingServerList
(
ServerList
<
DiscoveryEnabledServer
>
list
,
IClientConfig
clientConfig
,
boolean
approximateZoneFromHostname
)
{
IClientConfig
clientConfig
,
boolean
approximateZoneFromHostname
)
{
this
.
list
=
list
;
this
.
list
=
list
;
this
.
clientConfig
=
clientConfig
;
this
.
ribbon
=
RibbonProperties
.
from
(
clientConfig
)
;
this
.
approximateZoneFromHostname
=
approximateZoneFromHostname
;
this
.
approximateZoneFromHostname
=
approximateZoneFromHostname
;
}
}
...
@@ -60,10 +60,8 @@ public class DomainExtractingServerList implements ServerList<DiscoveryEnabledSe
...
@@ -60,10 +60,8 @@ public class DomainExtractingServerList implements ServerList<DiscoveryEnabledSe
private
List
<
DiscoveryEnabledServer
>
setZones
(
List
<
DiscoveryEnabledServer
>
servers
)
{
private
List
<
DiscoveryEnabledServer
>
setZones
(
List
<
DiscoveryEnabledServer
>
servers
)
{
List
<
DiscoveryEnabledServer
>
result
=
new
ArrayList
<>();
List
<
DiscoveryEnabledServer
>
result
=
new
ArrayList
<>();
boolean
isSecure
=
this
.
clientConfig
.
getPropertyAsBoolean
(
boolean
isSecure
=
this
.
ribbon
.
isSecure
(
true
);
CommonClientConfigKey
.
IsSecure
,
Boolean
.
TRUE
);
boolean
shouldUseIpAddr
=
this
.
ribbon
.
isUseIPAddrForServer
();
boolean
shouldUseIpAddr
=
this
.
clientConfig
.
getPropertyAsBoolean
(
CommonClientConfigKey
.
UseIPAddrForServer
,
Boolean
.
FALSE
);
for
(
DiscoveryEnabledServer
server
:
servers
)
{
for
(
DiscoveryEnabledServer
server
:
servers
)
{
result
.
add
(
new
DomainExtractingServer
(
server
,
isSecure
,
shouldUseIpAddr
,
result
.
add
(
new
DomainExtractingServer
(
server
,
isSecure
,
shouldUseIpAddr
,
this
.
approximateZoneFromHostname
));
this
.
approximateZoneFromHostname
));
...
...
spring-cloud-netflix-ribbon/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonProperties.java
0 → 100644
View file @
dd978169
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.client.config.IClientConfigKey
;
import
java.util.concurrent.TimeUnit
;
import
static
com
.
netflix
.
client
.
config
.
CommonClientConfigKey
.
PoolKeepAliveTime
;
import
static
com
.
netflix
.
client
.
config
.
CommonClientConfigKey
.
PoolKeepAliveTimeUnits
;
import
static
com
.
netflix
.
client
.
config
.
CommonClientConfigKey
.
Port
;
import
static
com
.
netflix
.
client
.
config
.
CommonClientConfigKey
.
SecurePort
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_CONNECTION_IDLE_TIMERTASK_REPEAT_IN_MSECS
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_CONNECT_TIMEOUT
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_FOLLOW_REDIRECTS
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_MAX_CONNECTIONS_PER_HOST
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_MAX_TOTAL_CONNECTIONS
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_OK_TO_RETRY_ON_ALL_OPERATIONS
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_POOL_KEEP_ALIVE_TIME
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_POOL_KEEP_ALIVE_TIME_UNITS
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_PORT
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_READ_TIMEOUT
;
public
class
RibbonProperties
{
private
final
IClientConfig
config
;
public
static
RibbonProperties
from
(
IClientConfig
config
)
{
return
new
RibbonProperties
(
config
);
}
RibbonProperties
(
IClientConfig
config
)
{
this
.
config
=
config
;
}
public
Integer
getConnectionCleanerRepeatInterval
()
{
return
get
(
CommonClientConfigKey
.
ConnectionCleanerRepeatInterval
);
}
public
int
connectionCleanerRepeatInterval
()
{
return
get
(
CommonClientConfigKey
.
ConnectionCleanerRepeatInterval
,
DEFAULT_CONNECTION_IDLE_TIMERTASK_REPEAT_IN_MSECS
);
}
public
Integer
getConnectTimeout
()
{
return
get
(
CommonClientConfigKey
.
ConnectTimeout
);
}
public
int
connectTimeout
()
{
return
connectTimeout
(
DEFAULT_CONNECT_TIMEOUT
);
}
public
int
connectTimeout
(
int
defaultValue
)
{
return
get
(
CommonClientConfigKey
.
ConnectTimeout
,
defaultValue
);
}
public
Boolean
getFollowRedirects
()
{
return
get
(
CommonClientConfigKey
.
FollowRedirects
);
}
public
boolean
isFollowRedirects
()
{
return
isFollowRedirects
(
DEFAULT_FOLLOW_REDIRECTS
);
}
public
boolean
isFollowRedirects
(
boolean
defaultValue
)
{
return
get
(
CommonClientConfigKey
.
FollowRedirects
,
defaultValue
);
}
public
Integer
getMaxConnectionsPerHost
()
{
return
get
(
CommonClientConfigKey
.
MaxConnectionsPerHost
);
}
public
int
maxConnectionsPerHost
()
{
return
maxConnectionsPerHost
(
DEFAULT_MAX_CONNECTIONS_PER_HOST
);
}
public
int
maxConnectionsPerHost
(
int
defaultValue
)
{
return
get
(
CommonClientConfigKey
.
MaxConnectionsPerHost
,
defaultValue
);
}
public
Integer
getMaxTotalConnections
()
{
return
get
(
CommonClientConfigKey
.
MaxTotalConnections
);
}
public
int
maxTotalConnections
()
{
return
maxTotalConnections
(
DEFAULT_MAX_TOTAL_CONNECTIONS
);
}
public
int
maxTotalConnections
(
int
defaultValue
)
{
return
get
(
CommonClientConfigKey
.
MaxTotalConnections
,
defaultValue
);
}
public
Boolean
getOkToRetryOnAllOperations
()
{
return
get
(
CommonClientConfigKey
.
OkToRetryOnAllOperations
);
}
public
boolean
isOkToRetryOnAllOperations
()
{
return
get
(
CommonClientConfigKey
.
OkToRetryOnAllOperations
,
DEFAULT_OK_TO_RETRY_ON_ALL_OPERATIONS
);
}
@SuppressWarnings
(
"deprecation"
)
public
Long
getPoolKeepAliveTime
()
{
Object
property
=
this
.
config
.
getProperty
(
PoolKeepAliveTime
);
if
(
property
instanceof
Long
)
{
return
(
Long
)
property
;
}
return
null
;
}
@SuppressWarnings
(
"deprecation"
)
public
long
poolKeepAliveTime
()
{
Object
property
=
this
.
config
.
getProperty
(
PoolKeepAliveTime
);
if
(
property
instanceof
Long
)
{
return
(
Long
)
property
;
}
return
DEFAULT_POOL_KEEP_ALIVE_TIME
;
}
@SuppressWarnings
(
"deprecation"
)
public
TimeUnit
getPoolKeepAliveTimeUnits
()
{
Object
property
=
this
.
config
.
getProperty
(
PoolKeepAliveTimeUnits
);
if
(
property
instanceof
TimeUnit
)
{
return
(
TimeUnit
)
property
;
}
return
DEFAULT_POOL_KEEP_ALIVE_TIME_UNITS
;
}
public
Integer
getPort
()
{
return
get
(
Port
);
}
public
int
port
()
{
return
get
(
Port
,
DEFAULT_PORT
);
}
public
Integer
getReadTimeout
()
{
return
get
(
CommonClientConfigKey
.
ReadTimeout
);
}
public
int
readTimeout
()
{
return
readTimeout
(
DEFAULT_READ_TIMEOUT
);
}
public
int
readTimeout
(
int
defaultValue
)
{
return
get
(
CommonClientConfigKey
.
ReadTimeout
,
defaultValue
);
}
public
Boolean
getSecure
()
{
return
get
(
CommonClientConfigKey
.
IsSecure
);
}
public
boolean
isSecure
()
{
return
isSecure
(
false
);
}
public
boolean
isSecure
(
boolean
defaultValue
)
{
return
get
(
CommonClientConfigKey
.
IsSecure
,
defaultValue
);
}
public
Integer
getSecurePort
()
{
return
this
.
config
.
get
(
SecurePort
);
}
public
Boolean
getUseIPAddrForServer
()
{
return
get
(
CommonClientConfigKey
.
UseIPAddrForServer
);
}
public
boolean
isUseIPAddrForServer
()
{
return
isUseIPAddrForServer
(
false
);
}
public
boolean
isUseIPAddrForServer
(
boolean
defaultValue
)
{
return
get
(
CommonClientConfigKey
.
UseIPAddrForServer
,
defaultValue
);
}
public
<
T
>
boolean
has
(
IClientConfigKey
<
T
>
key
)
{
return
this
.
config
.
containsProperty
(
key
);
}
public
<
T
>
T
get
(
IClientConfigKey
<
T
>
key
)
{
return
this
.
config
.
get
(
key
);
}
public
<
T
>
T
get
(
IClientConfigKey
<
T
>
key
,
T
defaultValue
)
{
return
this
.
config
.
get
(
key
,
defaultValue
);
}
}
spring-cloud-netflix-ribbon/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonUtils.java
View file @
dd978169
...
@@ -2,7 +2,6 @@ package org.springframework.cloud.netflix.ribbon;
...
@@ -2,7 +2,6 @@ package org.springframework.cloud.netflix.ribbon;
import
java.net.URI
;
import
java.net.URI
;
import
com.netflix.client.config.IClientConfigKey
;
import
org.springframework.util.StringUtils
;
import
org.springframework.util.StringUtils
;
import
org.springframework.web.util.UriComponentsBuilder
;
import
org.springframework.web.util.UriComponentsBuilder
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.CommonClientConfigKey
;
...
@@ -17,14 +16,6 @@ import java.util.Map;
...
@@ -17,14 +16,6 @@ import java.util.Map;
import
static
com
.
netflix
.
client
.
config
.
CommonClientConfigKey
.
DeploymentContextBasedVipAddresses
;
import
static
com
.
netflix
.
client
.
config
.
CommonClientConfigKey
.
DeploymentContextBasedVipAddresses
;
import
static
com
.
netflix
.
client
.
config
.
CommonClientConfigKey
.
EnableZoneAffinity
;
import
static
com
.
netflix
.
client
.
config
.
CommonClientConfigKey
.
EnableZoneAffinity
;
import
static
com
.
netflix
.
client
.
config
.
CommonClientConfigKey
.
Port
;
import
static
com
.
netflix
.
client
.
config
.
CommonClientConfigKey
.
SecurePort
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_CONNECT_TIMEOUT
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_FOLLOW_REDIRECTS
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_MAX_TOTAL_CONNECTIONS
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_OK_TO_RETRY_ON_ALL_OPERATIONS
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_PORT
;
import
static
com
.
netflix
.
client
.
config
.
DefaultClientConfigImpl
.
DEFAULT_READ_TIMEOUT
;
/**
/**
* @author Spencer Gibb
* @author Spencer Gibb
...
@@ -50,94 +41,6 @@ public class RibbonUtils {
...
@@ -50,94 +41,6 @@ public class RibbonUtils {
setRibbonProperty
(
serviceId
,
EnableZoneAffinity
.
key
(),
"true"
);
setRibbonProperty
(
serviceId
,
EnableZoneAffinity
.
key
(),
"true"
);
}
}
public
static
RibbonProperties
from
(
IClientConfig
config
)
{
return
new
RibbonProperties
(
config
);
}
//TODO: add more commonly used properties
//TODO: refactor s-c-netflix to use this class where possible
public
static
class
RibbonProperties
{
private
final
IClientConfig
config
;
RibbonProperties
(
IClientConfig
config
)
{
this
.
config
=
config
;
}
public
Integer
getPort
()
{
return
get
(
Port
);
}
public
int
port
()
{
return
get
(
Port
,
DEFAULT_PORT
);
}
public
Integer
getSecurePort
()
{
return
this
.
config
.
get
(
SecurePort
);
}
public
Boolean
getSecure
()
{
return
get
(
CommonClientConfigKey
.
IsSecure
);
}
public
boolean
isSecure
()
{
return
get
(
CommonClientConfigKey
.
IsSecure
,
false
);
}
public
Integer
getReadTimeout
()
{
return
get
(
CommonClientConfigKey
.
ReadTimeout
);
}
public
int
readTimeout
()
{
return
get
(
CommonClientConfigKey
.
ReadTimeout
,
DEFAULT_READ_TIMEOUT
);
}
public
Integer
getConnectTimeout
()
{
return
get
(
CommonClientConfigKey
.
ConnectTimeout
);
}
public
int
connectTimeout
()
{
return
get
(
CommonClientConfigKey
.
ConnectTimeout
,
DEFAULT_CONNECT_TIMEOUT
);
}
public
Boolean
getOkToRetryOnAllOperations
()
{
return
get
(
CommonClientConfigKey
.
OkToRetryOnAllOperations
);
}
public
boolean
isOkToRetryOnAllOperations
()
{
return
get
(
CommonClientConfigKey
.
OkToRetryOnAllOperations
,
DEFAULT_OK_TO_RETRY_ON_ALL_OPERATIONS
);
}
public
Boolean
getFollowRedirects
()
{
return
get
(
CommonClientConfigKey
.
FollowRedirects
);
}
public
boolean
isFollowRedirects
()
{
return
get
(
CommonClientConfigKey
.
FollowRedirects
,
DEFAULT_FOLLOW_REDIRECTS
);
}
public
Integer
getMaxTotalConnections
()
{
return
get
(
CommonClientConfigKey
.
MaxTotalConnections
);
}
public
int
maxTotalConnections
()
{
return
get
(
CommonClientConfigKey
.
MaxTotalConnections
,
DEFAULT_MAX_TOTAL_CONNECTIONS
);
}
public
<
T
>
boolean
has
(
IClientConfigKey
<
T
>
key
)
{
return
this
.
config
.
containsProperty
(
key
);
}
public
<
T
>
T
get
(
IClientConfigKey
<
T
>
key
)
{
return
this
.
config
.
get
(
key
);
}
public
<
T
>
T
get
(
IClientConfigKey
<
T
>
key
,
T
defaultValue
)
{
return
this
.
config
.
get
(
key
,
defaultValue
);
}
}
public
static
void
setRibbonProperty
(
String
serviceId
,
String
suffix
,
String
value
)
{
public
static
void
setRibbonProperty
(
String
serviceId
,
String
suffix
,
String
value
)
{
// how to set the namespace properly?
// how to set the namespace properly?
String
key
=
getRibbonKey
(
serviceId
,
suffix
);
String
key
=
getRibbonKey
(
serviceId
,
suffix
);
...
...
spring-cloud-netflix-ribbon/src/main/java/org/springframework/cloud/netflix/ribbon/apache/HttpClientRibbonConfiguration.java
View file @
dd978169
...
@@ -37,14 +37,13 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFact
...
@@ -37,14 +37,13 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFact
import
org.springframework.cloud.commons.httpclient.ApacheHttpClientConnectionManagerFactory
;
import
org.springframework.cloud.commons.httpclient.ApacheHttpClientConnectionManagerFactory
;
import
org.springframework.cloud.commons.httpclient.ApacheHttpClientFactory
;
import
org.springframework.cloud.commons.httpclient.ApacheHttpClientFactory
;
import
org.springframework.cloud.netflix.ribbon.RibbonClientName
;
import
org.springframework.cloud.netflix.ribbon.RibbonClientName
;
import
org.springframework.cloud.netflix.ribbon.RibbonProperties
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
com.netflix.client.AbstractLoadBalancerAwareClient
;
import
com.netflix.client.AbstractLoadBalancerAwareClient
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.DefaultClientConfigImpl
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.servo.monitor.Monitors
;
import
com.netflix.servo.monitor.Monitors
;
...
@@ -73,27 +72,12 @@ public class HttpClientRibbonConfiguration {
...
@@ -73,27 +72,12 @@ public class HttpClientRibbonConfiguration {
public
HttpClientConnectionManager
httpClientConnectionManager
(
public
HttpClientConnectionManager
httpClientConnectionManager
(
IClientConfig
config
,
IClientConfig
config
,
ApacheHttpClientConnectionManagerFactory
connectionManagerFactory
)
{
ApacheHttpClientConnectionManagerFactory
connectionManagerFactory
)
{
Integer
maxTotalConnections
=
config
.
getPropertyAsInteger
(
RibbonProperties
ribbon
=
RibbonProperties
.
from
(
config
);
CommonClientConfigKey
.
MaxTotalConnections
,
int
maxTotalConnections
=
ribbon
.
maxTotalConnections
();
DefaultClientConfigImpl
.
DEFAULT_MAX_TOTAL_CONNECTIONS
);
int
maxConnectionsPerHost
=
ribbon
.
maxConnectionsPerHost
();
Integer
maxConnectionsPerHost
=
config
.
getPropertyAsInteger
(
int
timerRepeat
=
ribbon
.
connectionCleanerRepeatInterval
();
CommonClientConfigKey
.
MaxConnectionsPerHost
,
long
timeToLive
=
ribbon
.
poolKeepAliveTime
();
DefaultClientConfigImpl
.
DEFAULT_MAX_CONNECTIONS_PER_HOST
);
TimeUnit
ttlUnit
=
ribbon
.
getPoolKeepAliveTimeUnits
();
Integer
timerRepeat
=
config
.
getPropertyAsInteger
(
CommonClientConfigKey
.
ConnectionCleanerRepeatInterval
,
DefaultClientConfigImpl
.
DEFAULT_CONNECTION_IDLE_TIMERTASK_REPEAT_IN_MSECS
);
Object
timeToLiveObj
=
config
.
getProperty
(
CommonClientConfigKey
.
PoolKeepAliveTime
);
Long
timeToLive
=
DefaultClientConfigImpl
.
DEFAULT_POOL_KEEP_ALIVE_TIME
;
Object
ttlUnitObj
=
config
.
getProperty
(
CommonClientConfigKey
.
PoolKeepAliveTimeUnits
);
TimeUnit
ttlUnit
=
DefaultClientConfigImpl
.
DEFAULT_POOL_KEEP_ALIVE_TIME_UNITS
;
if
(
timeToLiveObj
instanceof
Long
)
{
timeToLive
=
(
Long
)
timeToLiveObj
;
}
if
(
ttlUnitObj
instanceof
TimeUnit
)
{
ttlUnit
=
(
TimeUnit
)
ttlUnitObj
;
}
final
HttpClientConnectionManager
connectionManager
=
connectionManagerFactory
final
HttpClientConnectionManager
connectionManager
=
connectionManagerFactory
.
newConnectionManager
(
false
,
maxTotalConnections
,
.
newConnectionManager
(
false
,
maxTotalConnections
,
maxConnectionsPerHost
,
timeToLive
,
ttlUnit
,
registryBuilder
);
maxConnectionsPerHost
,
timeToLive
,
ttlUnit
,
registryBuilder
);
...
@@ -110,12 +94,9 @@ public class HttpClientRibbonConfiguration {
...
@@ -110,12 +94,9 @@ public class HttpClientRibbonConfiguration {
@ConditionalOnMissingBean
(
CloseableHttpClient
.
class
)
@ConditionalOnMissingBean
(
CloseableHttpClient
.
class
)
public
CloseableHttpClient
httpClient
(
ApacheHttpClientFactory
httpClientFactory
,
public
CloseableHttpClient
httpClient
(
ApacheHttpClientFactory
httpClientFactory
,
HttpClientConnectionManager
connectionManager
,
IClientConfig
config
)
{
HttpClientConnectionManager
connectionManager
,
IClientConfig
config
)
{
Boolean
followRedirects
=
config
.
getPropertyAsBoolean
(
RibbonProperties
ribbon
=
RibbonProperties
.
from
(
config
);
CommonClientConfigKey
.
FollowRedirects
,
Boolean
followRedirects
=
ribbon
.
isFollowRedirects
();
DefaultClientConfigImpl
.
DEFAULT_FOLLOW_REDIRECTS
);
Integer
connectTimeout
=
ribbon
.
connectTimeout
();
Integer
connectTimeout
=
config
.
getPropertyAsInteger
(
CommonClientConfigKey
.
ConnectTimeout
,
DefaultClientConfigImpl
.
DEFAULT_CONNECT_TIMEOUT
);
RequestConfig
defaultRequestConfig
=
RequestConfig
.
custom
()
RequestConfig
defaultRequestConfig
=
RequestConfig
.
custom
()
.
setConnectTimeout
(
connectTimeout
)
.
setConnectTimeout
(
connectTimeout
)
.
setRedirectsEnabled
(
followRedirects
).
build
();
.
setRedirectsEnabled
(
followRedirects
).
build
();
...
...
spring-cloud-netflix-ribbon/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RetryableRibbonLoadBalancingHttpClient.java
View file @
dd978169
...
@@ -30,10 +30,10 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicy;
...
@@ -30,10 +30,10 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicy;
import
org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory
;
import
org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory
;
import
org.springframework.cloud.client.loadbalancer.RetryableStatusCodeException
;
import
org.springframework.cloud.client.loadbalancer.RetryableStatusCodeException
;
import
org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser
;
import
org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser
;
import
org.springframework.cloud.netflix.ribbon.RibbonProperties
;
import
org.springframework.cloud.netflix.ribbon.support.RibbonRetryPolicy
;
import
org.springframework.cloud.netflix.ribbon.support.RibbonRetryPolicy
;
import
org.springframework.http.HttpRequest
;
import
org.springframework.http.HttpRequest
;
import
org.springframework.retry.RetryCallback
;
import
org.springframework.retry.RetryCallback
;
import
org.springframework.retry.RetryContext
;
import
org.springframework.retry.backoff.BackOffPolicy
;
import
org.springframework.retry.backoff.BackOffPolicy
;
import
org.springframework.retry.backoff.NoBackOffPolicy
;
import
org.springframework.retry.backoff.NoBackOffPolicy
;
import
org.springframework.retry.policy.NeverRetryPolicy
;
import
org.springframework.retry.policy.NeverRetryPolicy
;
...
@@ -42,7 +42,6 @@ import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient;
...
@@ -42,7 +42,6 @@ import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
com.netflix.client.RequestSpecificRetryHandler
;
import
com.netflix.client.RequestSpecificRetryHandler
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.Server
;
...
@@ -87,44 +86,39 @@ public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingH
...
@@ -87,44 +86,39 @@ public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingH
public
RibbonApacheHttpResponse
execute
(
final
RibbonApacheHttpRequest
request
,
final
IClientConfig
configOverride
)
throws
Exception
{
public
RibbonApacheHttpResponse
execute
(
final
RibbonApacheHttpRequest
request
,
final
IClientConfig
configOverride
)
throws
Exception
{
final
RequestConfig
.
Builder
builder
=
RequestConfig
.
custom
();
final
RequestConfig
.
Builder
builder
=
RequestConfig
.
custom
();
IClientConfig
config
=
configOverride
!=
null
?
configOverride
:
this
.
config
;
IClientConfig
config
=
configOverride
!=
null
?
configOverride
:
this
.
config
;
builder
.
setConnectTimeout
(
config
.
get
(
RibbonProperties
ribbon
=
RibbonProperties
.
from
(
config
);
CommonClientConfigKey
.
ConnectTimeout
,
this
.
connectTimeout
));
builder
.
setConnectTimeout
(
ribbon
.
connectTimeout
(
this
.
connectTimeout
));
builder
.
setSocketTimeout
(
config
.
get
(
builder
.
setSocketTimeout
(
ribbon
.
readTimeout
(
this
.
readTimeout
));
CommonClientConfigKey
.
ReadTimeout
,
this
.
readTimeout
));
builder
.
setRedirectsEnabled
(
ribbon
.
isFollowRedirects
(
this
.
followRedirects
));
builder
.
setRedirectsEnabled
(
config
.
get
(
CommonClientConfigKey
.
FollowRedirects
,
this
.
followRedirects
));
final
RequestConfig
requestConfig
=
builder
.
build
();
final
RequestConfig
requestConfig
=
builder
.
build
();
final
LoadBalancedRetryPolicy
retryPolicy
=
loadBalancedRetryPolicyFactory
.
create
(
this
.
getClientName
(),
this
);
final
LoadBalancedRetryPolicy
retryPolicy
=
loadBalancedRetryPolicyFactory
.
create
(
this
.
getClientName
(),
this
);
RetryCallback
retryCallback
=
new
RetryCallback
()
{
RetryCallback
retryCallback
=
context
->
{
@Override
//on retries the policy will choose the server and set it in the context
public
RibbonApacheHttpResponse
doWithRetry
(
RetryContext
context
)
throws
Exception
{
//extract the server and update the request being made
//on retries the policy will choose the server and set it in the context
RibbonApacheHttpRequest
newRequest
=
request
;
//extract the server and update the request being made
if
(
context
instanceof
LoadBalancedRetryContext
)
{
RibbonApacheHttpRequest
newRequest
=
request
;
ServiceInstance
service
=
((
LoadBalancedRetryContext
)
context
).
getServiceInstance
();
if
(
context
instanceof
LoadBalancedRetryContext
)
{
if
(
service
!=
null
)
{
ServiceInstance
service
=
((
LoadBalancedRetryContext
)
context
).
getServiceInstance
();
//Reconstruct the request URI using the host and port set in the retry context
if
(
service
!=
null
)
{
newRequest
=
newRequest
.
withNewUri
(
new
URI
(
service
.
getUri
().
getScheme
(),
//Reconstruct the request URI using the host and port set in the retry context
newRequest
.
getURI
().
getUserInfo
(),
service
.
getHost
(),
service
.
getPort
(),
newRequest
=
newRequest
.
withNewUri
(
new
URI
(
service
.
getUri
().
getScheme
(),
newRequest
.
getURI
().
getPath
(),
newRequest
.
getURI
().
getQuery
(),
newRequest
.
getURI
().
getUserInfo
(),
service
.
getHost
(),
service
.
getPort
(),
newRequest
.
getURI
().
getFragment
()));
newRequest
.
getURI
().
getPath
(),
newRequest
.
getURI
().
getQuery
(),
}
newRequest
.
getURI
().
getFragment
()));
}
}
newRequest
=
getSecureRequest
(
request
,
configOverride
);
}
HttpUriRequest
httpUriRequest
=
newRequest
.
toRequest
(
requestConfig
);
newRequest
=
getSecureRequest
(
request
,
configOverride
);
final
HttpResponse
httpResponse
=
RetryableRibbonLoadBalancingHttpClient
.
this
.
delegate
.
execute
(
httpUriRequest
);
HttpUriRequest
httpUriRequest
=
newRequest
.
toRequest
(
requestConfig
);
if
(
retryPolicy
.
retryableStatusCode
(
httpResponse
.
getStatusLine
().
getStatusCode
()))
{
final
HttpResponse
httpResponse
=
RetryableRibbonLoadBalancingHttpClient
.
this
.
delegate
.
execute
(
httpUriRequest
);
if
(
CloseableHttpResponse
.
class
.
isInstance
(
httpResponse
))
{
if
(
retryPolicy
.
retryableStatusCode
(
httpResponse
.
getStatusLine
().
getStatusCode
()))
{
((
CloseableHttpResponse
)
httpResponse
).
close
();
if
(
CloseableHttpResponse
.
class
.
isInstance
(
httpResponse
))
{
}
((
CloseableHttpResponse
)
httpResponse
).
close
();
throw
new
RetryableStatusCodeException
(
RetryableRibbonLoadBalancingHttpClient
.
this
.
clientName
,
}
httpResponse
.
getStatusLine
().
getStatusCode
());
throw
new
RetryableStatusCodeException
(
RetryableRibbonLoadBalancingHttpClient
.
this
.
clientName
,
}
httpResponse
.
getStatusLine
().
getStatusCode
());
return
new
RibbonApacheHttpResponse
(
httpResponse
,
httpUriRequest
.
getURI
());
}
};
return
new
RibbonApacheHttpResponse
(
httpResponse
,
httpUriRequest
.
getURI
());
}
};
return
this
.
executeWithRetry
(
request
,
retryPolicy
,
retryCallback
);
return
this
.
executeWithRetry
(
request
,
retryPolicy
,
retryCallback
);
}
}
...
...
spring-cloud-netflix-ribbon/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClient.java
View file @
dd978169
...
@@ -17,18 +17,19 @@
...
@@ -17,18 +17,19 @@
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
apache
;
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
apache
;
import
java.net.URI
;
import
java.net.URI
;
import
org.apache.http.HttpResponse
;
import
org.apache.http.HttpResponse
;
import
org.apache.http.client.config.RequestConfig
;
import
org.apache.http.client.config.RequestConfig
;
import
org.apache.http.client.methods.HttpUriRequest
;
import
org.apache.http.client.methods.HttpUriRequest
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClientBuilder
;
import
org.apache.http.impl.client.HttpClientBuilder
;
import
org.springframework.cloud.netflix.ribbon.RibbonProperties
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.support.AbstractLoadBalancingClient
;
import
org.springframework.cloud.netflix.ribbon.support.AbstractLoadBalancingClient
;
import
org.springframework.web.util.UriComponentsBuilder
;
import
org.springframework.web.util.UriComponentsBuilder
;
import
org.springframework.cloud.netflix.ribbon.RibbonUtils
;
import
com.netflix.client.RequestSpecificRetryHandler
;
import
com.netflix.client.RequestSpecificRetryHandler
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.Server
;
...
@@ -54,13 +55,12 @@ public class RibbonLoadBalancingHttpClient extends
...
@@ -54,13 +55,12 @@ public class RibbonLoadBalancingHttpClient extends
}
}
protected
CloseableHttpClient
createDelegate
(
IClientConfig
config
)
{
protected
CloseableHttpClient
createDelegate
(
IClientConfig
config
)
{
RibbonProperties
ribbon
=
RibbonProperties
.
from
(
config
);
return
HttpClientBuilder
.
create
()
return
HttpClientBuilder
.
create
()
// already defaults to 0 in builder, so resetting to 0 won't hurt
// already defaults to 0 in builder, so resetting to 0 won't hurt
.
setMaxConnTotal
(
config
.
getPropertyAsInteger
(
.
setMaxConnTotal
(
ribbon
.
maxTotalConnections
(
0
))
CommonClientConfigKey
.
MaxTotalConnections
,
0
))
// already defaults to 0 in builder, so resetting to 0 won't hurt
// already defaults to 0 in builder, so resetting to 0 won't hurt
.
setMaxConnPerRoute
(
config
.
getPropertyAsInteger
(
.
setMaxConnPerRoute
(
ribbon
.
maxConnectionsPerHost
(
0
))
CommonClientConfigKey
.
MaxConnectionsPerHost
,
0
))
.
disableCookieManagement
().
useSystemProperties
()
// for proxy
.
disableCookieManagement
().
useSystemProperties
()
// for proxy
.
build
();
.
build
();
}
}
...
@@ -68,16 +68,14 @@ public class RibbonLoadBalancingHttpClient extends
...
@@ -68,16 +68,14 @@ public class RibbonLoadBalancingHttpClient extends
@Override
@Override
public
RibbonApacheHttpResponse
execute
(
RibbonApacheHttpRequest
request
,
public
RibbonApacheHttpResponse
execute
(
RibbonApacheHttpRequest
request
,
final
IClientConfig
configOverride
)
throws
Exception
{
final
IClientConfig
configOverride
)
throws
Exception
{
final
RequestConfig
.
Builder
builder
=
RequestConfig
.
custom
();
IClientConfig
config
=
configOverride
!=
null
?
configOverride
:
this
.
config
;
IClientConfig
config
=
configOverride
!=
null
?
configOverride
:
this
.
config
;
builder
.
setConnectTimeout
(
RibbonProperties
ribbon
=
RibbonProperties
.
from
(
config
);
config
.
get
(
CommonClientConfigKey
.
ConnectTimeout
,
this
.
connectTimeout
));
RequestConfig
requestConfig
=
RequestConfig
.
custom
()
builder
.
setSocketTimeout
(
.
setConnectTimeout
(
ribbon
.
connectTimeout
(
this
.
connectTimeout
))
config
.
get
(
CommonClientConfigKey
.
ReadTimeout
,
this
.
readTimeout
));
.
setSocketTimeout
(
ribbon
.
readTimeout
(
this
.
readTimeout
))
builder
.
setRedirectsEnabled
(
.
setRedirectsEnabled
(
ribbon
.
isFollowRedirects
(
this
.
followRedirects
))
config
.
get
(
CommonClientConfigKey
.
FollowRedirects
,
this
.
followRedirects
)
);
.
build
(
);
final
RequestConfig
requestConfig
=
builder
.
build
();
request
=
getSecureRequest
(
request
,
configOverride
);
request
=
getSecureRequest
(
request
,
configOverride
);
final
HttpUriRequest
httpUriRequest
=
request
.
toRequest
(
requestConfig
);
final
HttpUriRequest
httpUriRequest
=
request
.
toRequest
(
requestConfig
);
final
HttpResponse
httpResponse
=
this
.
delegate
.
execute
(
httpUriRequest
);
final
HttpResponse
httpResponse
=
this
.
delegate
.
execute
(
httpUriRequest
);
...
...
spring-cloud-netflix-ribbon/src/main/java/org/springframework/cloud/netflix/ribbon/okhttp/OkHttpLoadBalancingClient.java
View file @
dd978169
...
@@ -16,21 +16,23 @@
...
@@ -16,21 +16,23 @@
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
okhttp
;
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
okhttp
;
import
okhttp3.OkHttpClient
;
import
okhttp3.Request
;
import
okhttp3.Response
;
import
java.net.URI
;
import
java.net.URI
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeUnit
;
import
org.springframework.cloud.netflix.ribbon.RibbonProperties
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.support.AbstractLoadBalancingClient
;
import
org.springframework.cloud.netflix.ribbon.support.AbstractLoadBalancingClient
;
import
org.springframework.web.util.UriComponentsBuilder
;
import
org.springframework.web.util.UriComponentsBuilder
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.Server
;
import
static
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
RibbonUtils
.
updateToSecureConnectionIfNeeded
;
import
static
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
RibbonUtils
.
updateToSecureConnectionIfNeeded
;
import
okhttp3.OkHttpClient
;
import
okhttp3.Request
;
import
okhttp3.Response
;
/**
/**
* @author Spencer Gibb
* @author Spencer Gibb
* @author Ryan Baxter
* @author Ryan Baxter
...
@@ -71,17 +73,14 @@ public class OkHttpLoadBalancingClient
...
@@ -71,17 +73,14 @@ public class OkHttpLoadBalancingClient
}
}
OkHttpClient
getOkHttpClient
(
IClientConfig
configOverride
,
boolean
secure
)
{
OkHttpClient
getOkHttpClient
(
IClientConfig
configOverride
,
boolean
secure
)
{
OkHttpClient
.
Builder
builder
=
this
.
delegate
.
newBuilder
();
IClientConfig
config
=
configOverride
!=
null
?
configOverride
:
this
.
config
;
IClientConfig
config
=
configOverride
!=
null
?
configOverride
:
this
.
config
;
builder
.
connectTimeout
(
config
.
get
(
RibbonProperties
ribbon
=
RibbonProperties
.
from
(
config
);
CommonClientConfigKey
.
ConnectTimeout
,
this
.
connectTimeout
),
TimeUnit
.
MILLISECONDS
);
OkHttpClient
.
Builder
builder
=
this
.
delegate
.
newBuilder
()
builder
.
readTimeout
(
config
.
get
(
.
connectTimeout
(
ribbon
.
connectTimeout
(
this
.
connectTimeout
),
TimeUnit
.
MILLISECONDS
)
CommonClientConfigKey
.
ReadTimeout
,
this
.
readTimeout
),
TimeUnit
.
MILLISECONDS
);
.
readTimeout
(
ribbon
.
readTimeout
(
this
.
readTimeout
),
TimeUnit
.
MILLISECONDS
)
builder
.
followRedirects
(
config
.
get
(
.
followRedirects
(
ribbon
.
isFollowRedirects
(
this
.
followRedirects
));
CommonClientConfigKey
.
FollowRedirects
,
this
.
followRedirects
));
if
(
secure
)
{
if
(
secure
)
{
builder
.
followSslRedirects
(
configOverride
.
get
(
builder
.
followSslRedirects
(
ribbon
.
isFollowRedirects
(
this
.
followRedirects
));
CommonClientConfigKey
.
FollowRedirects
,
this
.
followRedirects
));
}
}
return
builder
.
build
();
return
builder
.
build
();
...
...
spring-cloud-netflix-ribbon/src/main/java/org/springframework/cloud/netflix/ribbon/okhttp/OkHttpRibbonConfiguration.java
View file @
dd978169
...
@@ -30,14 +30,13 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFact
...
@@ -30,14 +30,13 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFact
import
org.springframework.cloud.commons.httpclient.OkHttpClientConnectionPoolFactory
;
import
org.springframework.cloud.commons.httpclient.OkHttpClientConnectionPoolFactory
;
import
org.springframework.cloud.commons.httpclient.OkHttpClientFactory
;
import
org.springframework.cloud.commons.httpclient.OkHttpClientFactory
;
import
org.springframework.cloud.netflix.ribbon.RibbonClientName
;
import
org.springframework.cloud.netflix.ribbon.RibbonClientName
;
import
org.springframework.cloud.netflix.ribbon.RibbonProperties
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
com.netflix.client.AbstractLoadBalancerAwareClient
;
import
com.netflix.client.AbstractLoadBalancerAwareClient
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.DefaultClientConfigImpl
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.servo.monitor.Monitors
;
import
com.netflix.servo.monitor.Monitors
;
...
@@ -63,21 +62,10 @@ public class OkHttpRibbonConfiguration {
...
@@ -63,21 +62,10 @@ public class OkHttpRibbonConfiguration {
@ConditionalOnMissingBean
(
ConnectionPool
.
class
)
@ConditionalOnMissingBean
(
ConnectionPool
.
class
)
public
ConnectionPool
httpClientConnectionPool
(
IClientConfig
config
,
public
ConnectionPool
httpClientConnectionPool
(
IClientConfig
config
,
OkHttpClientConnectionPoolFactory
connectionPoolFactory
)
{
OkHttpClientConnectionPoolFactory
connectionPoolFactory
)
{
Integer
maxTotalConnections
=
config
.
getPropertyAsInteger
(
RibbonProperties
ribbon
=
RibbonProperties
.
from
(
config
);
CommonClientConfigKey
.
MaxTotalConnections
,
int
maxTotalConnections
=
ribbon
.
maxTotalConnections
();
DefaultClientConfigImpl
.
DEFAULT_MAX_TOTAL_CONNECTIONS
);
long
timeToLive
=
ribbon
.
poolKeepAliveTime
();
Object
timeToLiveObj
=
config
TimeUnit
ttlUnit
=
ribbon
.
getPoolKeepAliveTimeUnits
();
.
getProperty
(
CommonClientConfigKey
.
PoolKeepAliveTime
);
Long
timeToLive
=
DefaultClientConfigImpl
.
DEFAULT_POOL_KEEP_ALIVE_TIME
;
Object
ttlUnitObj
=
config
.
getProperty
(
CommonClientConfigKey
.
PoolKeepAliveTimeUnits
);
TimeUnit
ttlUnit
=
DefaultClientConfigImpl
.
DEFAULT_POOL_KEEP_ALIVE_TIME_UNITS
;
if
(
timeToLiveObj
instanceof
Long
)
{
timeToLive
=
(
Long
)
timeToLiveObj
;
}
if
(
ttlUnitObj
instanceof
TimeUnit
)
{
ttlUnit
=
(
TimeUnit
)
ttlUnitObj
;
}
return
connectionPoolFactory
.
create
(
maxTotalConnections
,
timeToLive
,
ttlUnit
);
return
connectionPoolFactory
.
create
(
maxTotalConnections
,
timeToLive
,
ttlUnit
);
}
}
...
@@ -85,19 +73,13 @@ public class OkHttpRibbonConfiguration {
...
@@ -85,19 +73,13 @@ public class OkHttpRibbonConfiguration {
@ConditionalOnMissingBean
(
OkHttpClient
.
class
)
@ConditionalOnMissingBean
(
OkHttpClient
.
class
)
public
OkHttpClient
client
(
OkHttpClientFactory
httpClientFactory
,
public
OkHttpClient
client
(
OkHttpClientFactory
httpClientFactory
,
ConnectionPool
connectionPool
,
IClientConfig
config
)
{
ConnectionPool
connectionPool
,
IClientConfig
config
)
{
Boolean
followRedirects
=
config
.
getPropertyAsBoolean
(
RibbonProperties
ribbon
=
RibbonProperties
.
from
(
config
);
CommonClientConfigKey
.
FollowRedirects
,
this
.
httpClient
=
httpClientFactory
.
createBuilder
(
false
)
DefaultClientConfigImpl
.
DEFAULT_FOLLOW_REDIRECTS
);
.
connectTimeout
(
ribbon
.
connectTimeout
(),
TimeUnit
.
MILLISECONDS
)
Integer
connectTimeout
=
config
.
getPropertyAsInteger
(
.
readTimeout
(
ribbon
.
readTimeout
(),
TimeUnit
.
MILLISECONDS
)
CommonClientConfigKey
.
ConnectTimeout
,
.
followRedirects
(
ribbon
.
isFollowRedirects
())
DefaultClientConfigImpl
.
DEFAULT_CONNECT_TIMEOUT
);
.
connectionPool
(
connectionPool
)
Integer
readTimeout
=
config
.
getPropertyAsInteger
(
CommonClientConfigKey
.
ReadTimeout
,
.
build
();
DefaultClientConfigImpl
.
DEFAULT_READ_TIMEOUT
);
this
.
httpClient
=
httpClientFactory
.
createBuilder
(
false
).
connectTimeout
(
connectTimeout
,
TimeUnit
.
MILLISECONDS
).
readTimeout
(
readTimeout
,
TimeUnit
.
MILLISECONDS
).
followRedirects
(
followRedirects
).
connectionPool
(
connectionPool
).
build
();
return
this
.
httpClient
;
return
this
.
httpClient
;
}
}
...
...
spring-cloud-netflix-ribbon/src/main/java/org/springframework/cloud/netflix/ribbon/support/AbstractLoadBalancingClient.java
View file @
dd978169
...
@@ -18,18 +18,21 @@
...
@@ -18,18 +18,21 @@
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
support
;
package
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
support
;
import
org.springframework.cloud.netflix.ribbon.DefaultServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.DefaultServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.Ribbon
ClientConfiguration
;
import
org.springframework.cloud.netflix.ribbon.Ribbon
Properties
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
org.springframework.cloud.netflix.ribbon.ServerIntrospector
;
import
com.netflix.client.AbstractLoadBalancerAwareClient
;
import
com.netflix.client.AbstractLoadBalancerAwareClient
;
import
com.netflix.client.IResponse
;
import
com.netflix.client.IResponse
;
import
com.netflix.client.RequestSpecificRetryHandler
;
import
com.netflix.client.RequestSpecificRetryHandler
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.RetryHandler
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.DefaultClientConfigImpl
;
import
com.netflix.client.config.DefaultClientConfigImpl
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.loadbalancer.reactive.LoadBalancerCommand
;
import
com.netflix.loadbalancer.reactive.LoadBalancerCommand
;
import
static
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
RibbonClientConfiguration
.
DEFAULT_CONNECT_TIMEOUT
;
import
static
org
.
springframework
.
cloud
.
netflix
.
ribbon
.
RibbonClientConfiguration
.
DEFAULT_READ_TIMEOUT
;
/**
/**
* @author Spencer Gibb
* @author Spencer Gibb
*/
*/
...
@@ -91,20 +94,12 @@ public abstract class AbstractLoadBalancingClient<S extends ContextAwareRequest,
...
@@ -91,20 +94,12 @@ public abstract class AbstractLoadBalancingClient<S extends ContextAwareRequest,
@Override
@Override
public
void
initWithNiwsConfig
(
IClientConfig
clientConfig
)
{
public
void
initWithNiwsConfig
(
IClientConfig
clientConfig
)
{
super
.
initWithNiwsConfig
(
clientConfig
);
super
.
initWithNiwsConfig
(
clientConfig
);
this
.
connectTimeout
=
clientConfig
.
getPropertyAsInteger
(
RibbonProperties
ribbon
=
RibbonProperties
.
from
(
clientConfig
);
CommonClientConfigKey
.
ConnectTimeout
,
this
.
connectTimeout
=
ribbon
.
connectTimeout
(
DEFAULT_CONNECT_TIMEOUT
);
RibbonClientConfiguration
.
DEFAULT_CONNECT_TIMEOUT
);
this
.
readTimeout
=
ribbon
.
readTimeout
(
DEFAULT_READ_TIMEOUT
);
this
.
readTimeout
=
clientConfig
.
getPropertyAsInteger
(
this
.
secure
=
ribbon
.
isSecure
();
CommonClientConfigKey
.
ReadTimeout
,
this
.
followRedirects
=
ribbon
.
isFollowRedirects
();
RibbonClientConfiguration
.
DEFAULT_READ_TIMEOUT
);
this
.
okToRetryOnAllOperations
=
ribbon
.
isOkToRetryOnAllOperations
();
this
.
secure
=
clientConfig
.
getPropertyAsBoolean
(
CommonClientConfigKey
.
IsSecure
,
false
);
this
.
followRedirects
=
clientConfig
.
getPropertyAsBoolean
(
CommonClientConfigKey
.
FollowRedirects
,
DefaultClientConfigImpl
.
DEFAULT_FOLLOW_REDIRECTS
);
this
.
okToRetryOnAllOperations
=
clientConfig
.
getPropertyAsBoolean
(
CommonClientConfigKey
.
OkToRetryOnAllOperations
,
DefaultClientConfigImpl
.
DEFAULT_OK_TO_RETRY_ON_ALL_OPERATIONS
);
}
}
protected
abstract
D
createDelegate
(
IClientConfig
config
);
protected
abstract
D
createDelegate
(
IClientConfig
config
);
...
@@ -133,10 +128,7 @@ public abstract class AbstractLoadBalancingClient<S extends ContextAwareRequest,
...
@@ -133,10 +128,7 @@ public abstract class AbstractLoadBalancingClient<S extends ContextAwareRequest,
protected
boolean
isSecure
(
final
IClientConfig
config
)
{
protected
boolean
isSecure
(
final
IClientConfig
config
)
{
if
(
config
!=
null
)
{
if
(
config
!=
null
)
{
Boolean
result
=
config
.
get
(
CommonClientConfigKey
.
IsSecure
);
return
RibbonProperties
.
from
(
config
).
isSecure
(
this
.
secure
);
if
(
result
!=
null
)
{
return
result
;
}
}
}
return
this
.
secure
;
return
this
.
secure
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment