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
572305d7
Commit
572305d7
authored
Jun 28, 2017
by
Ryan Baxter
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixing code formatting
parent
2aa93abc
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
182 additions
and
138 deletions
+182
-138
FeignAutoConfiguration.java
...framework/cloud/netflix/feign/FeignAutoConfiguration.java
+18
-16
FeignRibbonClientAutoConfiguration.java
...flix/feign/ribbon/FeignRibbonClientAutoConfiguration.java
+22
-17
RibbonClientConfiguration.java
...ework/cloud/netflix/ribbon/RibbonClientConfiguration.java
+0
-0
RetryableRibbonLoadBalancingHttpClient.java
...ribbon/apache/RetryableRibbonLoadBalancingHttpClient.java
+61
-41
RibbonLoadBalancingHttpClient.java
.../netflix/ribbon/apache/RibbonLoadBalancingHttpClient.java
+22
-17
ZuulProxyAutoConfiguration.java
...mework/cloud/netflix/zuul/ZuulProxyAutoConfiguration.java
+21
-14
SimpleHostRoutingFilter.java
...d/netflix/zuul/filters/route/SimpleHostRoutingFilter.java
+38
-33
No files found.
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java
View file @
572305d7
...
@@ -45,8 +45,6 @@ import feign.httpclient.ApacheHttpClient;
...
@@ -45,8 +45,6 @@ import feign.httpclient.ApacheHttpClient;
import
feign.okhttp.OkHttpClient
;
import
feign.okhttp.OkHttpClient
;
import
javax.annotation.PreDestroy
;
import
javax.annotation.PreDestroy
;
import
com.netflix.client.config.CommonClientConfigKey
;
import
com.netflix.client.config.DefaultClientConfigImpl
;
/**
/**
* @author Spencer Gibb
* @author Spencer Gibb
...
@@ -54,7 +52,7 @@ import com.netflix.client.config.DefaultClientConfigImpl;
...
@@ -54,7 +52,7 @@ import com.netflix.client.config.DefaultClientConfigImpl;
*/
*/
@Configuration
@Configuration
@ConditionalOnClass
(
Feign
.
class
)
@ConditionalOnClass
(
Feign
.
class
)
@EnableConfigurationProperties
({
FeignHttpClientProperties
.
class
})
@EnableConfigurationProperties
({
FeignHttpClientProperties
.
class
})
public
class
FeignAutoConfiguration
{
public
class
FeignAutoConfiguration
{
@Autowired
(
required
=
false
)
@Autowired
(
required
=
false
)
...
@@ -110,12 +108,14 @@ public class FeignAutoConfiguration {
...
@@ -110,12 +108,14 @@ public class FeignAutoConfiguration {
private
CloseableHttpClient
httpClient
;
private
CloseableHttpClient
httpClient
;
@Bean
@Bean
public
HttpClientConnectionManager
connectionManager
(
ApacheHttpClientConnectionManagerFactory
connectionManagerFactory
,
public
HttpClientConnectionManager
connectionManager
(
FeignHttpClientProperties
httpClientProperties
)
{
ApacheHttpClientConnectionManagerFactory
connectionManagerFactory
,
final
HttpClientConnectionManager
connectionManager
=
connectionManagerFactory
.
newConnectionManager
(
false
,
httpClientProperties
.
getMaxConnections
(),
FeignHttpClientProperties
httpClientProperties
)
{
httpClientProperties
.
getMaxConnectionsPerRoute
(),
httpClientProperties
.
getTimeToLive
(),
final
HttpClientConnectionManager
connectionManager
=
connectionManagerFactory
httpClientProperties
.
getTimeToLiveUnit
(),
.
newConnectionManager
(
false
,
httpClientProperties
.
getMaxConnections
(),
registryBuilder
);
httpClientProperties
.
getMaxConnectionsPerRoute
(),
httpClientProperties
.
getTimeToLive
(),
httpClientProperties
.
getTimeToLiveUnit
(),
registryBuilder
);
this
.
connectionManagerTimer
.
schedule
(
new
TimerTask
()
{
this
.
connectionManagerTimer
.
schedule
(
new
TimerTask
()
{
@Override
@Override
public
void
run
()
{
public
void
run
()
{
...
@@ -126,13 +126,15 @@ public class FeignAutoConfiguration {
...
@@ -126,13 +126,15 @@ public class FeignAutoConfiguration {
}
}
@Bean
@Bean
public
CloseableHttpClient
httpClient
(
ApacheHttpClientFactory
httpClientFactory
,
HttpClientConnectionManager
httpClientConnectionManager
,
public
CloseableHttpClient
httpClient
(
ApacheHttpClientFactory
httpClientFactory
,
FeignHttpClientProperties
httpClientProperties
)
{
HttpClientConnectionManager
httpClientConnectionManager
,
RequestConfig
defaultRequestConfig
=
RequestConfig
.
custom
().
FeignHttpClientProperties
httpClientProperties
)
{
setConnectTimeout
(
httpClientProperties
.
getConnectionTimeout
()).
RequestConfig
defaultRequestConfig
=
RequestConfig
.
custom
()
setRedirectsEnabled
(
httpClientProperties
.
isFollowRedirects
()).
.
setConnectTimeout
(
httpClientProperties
.
getConnectionTimeout
())
build
();
.
setRedirectsEnabled
(
httpClientProperties
.
isFollowRedirects
())
this
.
httpClient
=
httpClientFactory
.
createClient
(
defaultRequestConfig
,
httpClientConnectionManager
);
.
build
();
this
.
httpClient
=
httpClientFactory
.
createClient
(
defaultRequestConfig
,
httpClientConnectionManager
);
return
this
.
httpClient
;
return
this
.
httpClient
;
}
}
...
...
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java
View file @
572305d7
...
@@ -59,7 +59,7 @@ import javax.annotation.PreDestroy;
...
@@ -59,7 +59,7 @@ import javax.annotation.PreDestroy;
@ConditionalOnClass
({
ILoadBalancer
.
class
,
Feign
.
class
})
@ConditionalOnClass
({
ILoadBalancer
.
class
,
Feign
.
class
})
@Configuration
@Configuration
@AutoConfigureBefore
(
FeignAutoConfiguration
.
class
)
@AutoConfigureBefore
(
FeignAutoConfiguration
.
class
)
@EnableConfigurationProperties
({
FeignHttpClientProperties
.
class
})
@EnableConfigurationProperties
({
FeignHttpClientProperties
.
class
})
public
class
FeignRibbonClientAutoConfiguration
{
public
class
FeignRibbonClientAutoConfiguration
{
@Bean
@Bean
...
@@ -74,7 +74,8 @@ public class FeignRibbonClientAutoConfiguration {
...
@@ -74,7 +74,8 @@ public class FeignRibbonClientAutoConfiguration {
@Primary
@Primary
@ConditionalOnClass
(
name
=
"org.springframework.retry.support.RetryTemplate"
)
@ConditionalOnClass
(
name
=
"org.springframework.retry.support.RetryTemplate"
)
public
CachingSpringLoadBalancerFactory
retryabeCachingLBClientFactory
(
public
CachingSpringLoadBalancerFactory
retryabeCachingLBClientFactory
(
SpringClientFactory
factory
,
LoadBalancedRetryPolicyFactory
retryPolicyFactory
)
{
SpringClientFactory
factory
,
LoadBalancedRetryPolicyFactory
retryPolicyFactory
)
{
return
new
CachingSpringLoadBalancerFactory
(
factory
,
retryPolicyFactory
,
true
);
return
new
CachingSpringLoadBalancerFactory
(
factory
,
retryPolicyFactory
,
true
);
}
}
...
@@ -82,8 +83,8 @@ public class FeignRibbonClientAutoConfiguration {
...
@@ -82,8 +83,8 @@ public class FeignRibbonClientAutoConfiguration {
@ConditionalOnMissingBean
@ConditionalOnMissingBean
public
Client
feignClient
(
CachingSpringLoadBalancerFactory
cachingFactory
,
public
Client
feignClient
(
CachingSpringLoadBalancerFactory
cachingFactory
,
SpringClientFactory
clientFactory
)
{
SpringClientFactory
clientFactory
)
{
return
new
LoadBalancerFeignClient
(
new
Client
.
Default
(
null
,
null
),
return
new
LoadBalancerFeignClient
(
new
Client
.
Default
(
null
,
null
),
cachingFactory
,
c
achingFactory
,
c
lientFactory
);
clientFactory
);
}
}
@Bean
@Bean
...
@@ -106,12 +107,14 @@ public class FeignRibbonClientAutoConfiguration {
...
@@ -106,12 +107,14 @@ public class FeignRibbonClientAutoConfiguration {
private
RegistryBuilder
registryBuilder
;
private
RegistryBuilder
registryBuilder
;
@Bean
@Bean
public
HttpClientConnectionManager
connectionManager
(
ApacheHttpClientConnectionManagerFactory
connectionManagerFactory
,
public
HttpClientConnectionManager
connectionManager
(
FeignHttpClientProperties
httpClientProperties
)
{
ApacheHttpClientConnectionManagerFactory
connectionManagerFactory
,
final
HttpClientConnectionManager
connectionManager
=
connectionManagerFactory
.
newConnectionManager
(
false
,
httpClientProperties
.
getMaxConnections
(),
FeignHttpClientProperties
httpClientProperties
)
{
httpClientProperties
.
getMaxConnectionsPerRoute
(),
httpClientProperties
.
getTimeToLive
(),
final
HttpClientConnectionManager
connectionManager
=
connectionManagerFactory
httpClientProperties
.
getTimeToLiveUnit
(),
.
newConnectionManager
(
false
,
httpClientProperties
.
getMaxConnections
(),
registryBuilder
);
httpClientProperties
.
getMaxConnectionsPerRoute
(),
httpClientProperties
.
getTimeToLive
(),
httpClientProperties
.
getTimeToLiveUnit
(),
registryBuilder
);
this
.
connectionManagerTimer
.
schedule
(
new
TimerTask
()
{
this
.
connectionManagerTimer
.
schedule
(
new
TimerTask
()
{
@Override
@Override
public
void
run
()
{
public
void
run
()
{
...
@@ -122,13 +125,15 @@ public class FeignRibbonClientAutoConfiguration {
...
@@ -122,13 +125,15 @@ public class FeignRibbonClientAutoConfiguration {
}
}
@Bean
@Bean
public
CloseableHttpClient
httpClient
(
ApacheHttpClientFactory
httpClientFactory
,
HttpClientConnectionManager
httpClientConnectionManager
,
public
CloseableHttpClient
httpClient
(
ApacheHttpClientFactory
httpClientFactory
,
FeignHttpClientProperties
httpClientProperties
)
{
HttpClientConnectionManager
httpClientConnectionManager
,
RequestConfig
defaultRequestConfig
=
RequestConfig
.
custom
().
FeignHttpClientProperties
httpClientProperties
)
{
setConnectTimeout
(
httpClientProperties
.
getConnectionTimeout
()).
RequestConfig
defaultRequestConfig
=
RequestConfig
.
custom
()
setRedirectsEnabled
(
httpClientProperties
.
isFollowRedirects
()).
.
setConnectTimeout
(
httpClientProperties
.
getConnectionTimeout
())
build
();
.
setRedirectsEnabled
(
httpClientProperties
.
isFollowRedirects
())
this
.
httpClient
=
httpClientFactory
.
createClient
(
defaultRequestConfig
,
httpClientConnectionManager
);
.
build
();
this
.
httpClient
=
httpClientFactory
.
createClient
(
defaultRequestConfig
,
httpClientConnectionManager
);
return
this
.
httpClient
;
return
this
.
httpClient
;
}
}
...
...
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java
View file @
572305d7
This diff is collapsed.
Click to expand it.
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RetryableRibbonLoadBalancingHttpClient.java
View file @
572305d7
...
@@ -48,75 +48,94 @@ import com.netflix.loadbalancer.Server;
...
@@ -48,75 +48,94 @@ import com.netflix.loadbalancer.Server;
* An Apache HTTP client which leverages Spring Retry to retry failed requests.
* An Apache HTTP client which leverages Spring Retry to retry failed requests.
* @author Ryan Baxter
* @author Ryan Baxter
*/
*/
public
class
RetryableRibbonLoadBalancingHttpClient
extends
RibbonLoadBalancingHttpClient
implements
ServiceInstanceChooser
{
public
class
RetryableRibbonLoadBalancingHttpClient
extends
RibbonLoadBalancingHttpClient
private
LoadBalancedRetryPolicyFactory
loadBalancedRetryPolicyFactory
=
implements
ServiceInstanceChooser
{
new
LoadBalancedRetryPolicyFactory
.
NeverRetryFactory
();
private
LoadBalancedRetryPolicyFactory
loadBalancedRetryPolicyFactory
=
new
LoadBalancedRetryPolicyFactory
.
NeverRetryFactory
();
public
RetryableRibbonLoadBalancingHttpClient
(
IClientConfig
config
,
ServerIntrospector
serverIntrospector
,
public
RetryableRibbonLoadBalancingHttpClient
(
IClientConfig
config
,
LoadBalancedRetryPolicyFactory
loadBalancedRetryPolicyFactory
)
{
ServerIntrospector
serverIntrospector
,
LoadBalancedRetryPolicyFactory
loadBalancedRetryPolicyFactory
)
{
super
(
config
,
serverIntrospector
);
super
(
config
,
serverIntrospector
);
this
.
loadBalancedRetryPolicyFactory
=
loadBalancedRetryPolicyFactory
;
this
.
loadBalancedRetryPolicyFactory
=
loadBalancedRetryPolicyFactory
;
}
}
public
RetryableRibbonLoadBalancingHttpClient
(
CloseableHttpClient
delegate
,
IClientConfig
config
,
ServerIntrospector
serverIntrospector
,
LoadBalancedRetryPolicyFactory
loadBalancedRetryPolicyFactory
)
{
public
RetryableRibbonLoadBalancingHttpClient
(
CloseableHttpClient
delegate
,
IClientConfig
config
,
ServerIntrospector
serverIntrospector
,
LoadBalancedRetryPolicyFactory
loadBalancedRetryPolicyFactory
)
{
super
(
delegate
,
config
,
serverIntrospector
);
super
(
delegate
,
config
,
serverIntrospector
);
this
.
loadBalancedRetryPolicyFactory
=
loadBalancedRetryPolicyFactory
;
this
.
loadBalancedRetryPolicyFactory
=
loadBalancedRetryPolicyFactory
;
}
}
@Override
@Override
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
(
builder
.
setConnectTimeout
(
CommonClientConfigKey
.
ConnectTimeout
,
this
.
connectTimeout
));
config
.
get
(
CommonClientConfigKey
.
ConnectTimeout
,
this
.
connectTimeout
));
builder
.
setSocketTimeout
(
config
.
get
(
builder
.
setSocketTimeout
(
CommonClientConfigKey
.
ReadTimeout
,
this
.
readTimeout
));
config
.
get
(
CommonClientConfigKey
.
ReadTimeout
,
this
.
readTimeout
));
builder
.
setRedirectsEnabled
(
config
.
get
(
builder
.
setRedirectsEnabled
(
CommonClientConfigKey
.
FollowRedirects
,
this
.
followRedirects
));
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
=
new
RetryCallback
()
{
@Override
@Override
public
RibbonApacheHttpResponse
doWithRetry
(
RetryContext
context
)
throws
Exception
{
public
RibbonApacheHttpResponse
doWithRetry
(
RetryContext
context
)
//on retries the policy will choose the server and set it in the 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
// extract the server and update the request being made
RibbonApacheHttpRequest
newRequest
=
request
;
RibbonApacheHttpRequest
newRequest
=
request
;
if
(
context
instanceof
LoadBalancedRetryContext
)
{
if
(
context
instanceof
LoadBalancedRetryContext
)
{
ServiceInstance
service
=
((
LoadBalancedRetryContext
)
context
).
getServiceInstance
();
ServiceInstance
service
=
((
LoadBalancedRetryContext
)
context
)
if
(
service
!=
null
)
{
.
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
newRequest
.
getURI
().
getUserInfo
(),
service
.
getHost
(),
service
.
getPort
(),
// retry context
newRequest
.
getURI
().
getPath
(),
newRequest
.
getURI
().
getQuery
(),
newRequest
=
newRequest
.
withNewUri
(
new
URI
(
service
.
getUri
().
getScheme
(),
newRequest
.
getURI
().
getUserInfo
(),
service
.
getHost
(),
service
.
getPort
(),
newRequest
.
getURI
().
getPath
(),
newRequest
.
getURI
().
getQuery
(),
newRequest
.
getURI
().
getFragment
()));
newRequest
.
getURI
().
getFragment
()));
}
}
}
}
if
(
isSecure
(
configOverride
))
{
if
(
isSecure
(
configOverride
))
{
final
URI
secureUri
=
UriComponentsBuilder
.
fromUri
(
newRequest
.
getUri
())
final
URI
secureUri
=
UriComponentsBuilder
.
scheme
(
"https"
).
build
().
toUri
();
.
fromUri
(
newRequest
.
getUri
()).
scheme
(
"https"
).
build
().
toUri
();
newRequest
=
newRequest
.
withNewUri
(
secureUri
);
newRequest
=
newRequest
.
withNewUri
(
secureUri
);
}
}
HttpUriRequest
httpUriRequest
=
newRequest
.
toRequest
(
requestConfig
);
HttpUriRequest
httpUriRequest
=
newRequest
.
toRequest
(
requestConfig
);
final
HttpResponse
httpResponse
=
RetryableRibbonLoadBalancingHttpClient
.
this
.
delegate
.
execute
(
httpUriRequest
);
final
HttpResponse
httpResponse
=
RetryableRibbonLoadBalancingHttpClient
.
this
.
delegate
if
(
retryPolicy
.
retryableStatusCode
(
httpResponse
.
getStatusLine
().
getStatusCode
()))
{
.
execute
(
httpUriRequest
);
if
(
CloseableHttpResponse
.
class
.
isInstance
(
httpResponse
))
{
if
(
retryPolicy
.
retryableStatusCode
(
((
CloseableHttpResponse
)
httpResponse
).
close
();
httpResponse
.
getStatusLine
().
getStatusCode
()))
{
if
(
CloseableHttpResponse
.
class
.
isInstance
(
httpResponse
))
{
((
CloseableHttpResponse
)
httpResponse
).
close
();
}
}
throw
new
RetryableStatusCodeException
(
RetryableRibbonLoadBalancingHttpClient
.
this
.
clientName
,
throw
new
RetryableStatusCodeException
(
RetryableRibbonLoadBalancingHttpClient
.
this
.
clientName
,
httpResponse
.
getStatusLine
().
getStatusCode
());
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
);
}
}
private
RibbonApacheHttpResponse
executeWithRetry
(
RibbonApacheHttpRequest
request
,
LoadBalancedRetryPolicy
retryPolicy
,
RetryCallback
<
RibbonApacheHttpResponse
,
IOException
>
callback
)
throws
Exception
{
private
RibbonApacheHttpResponse
executeWithRetry
(
RibbonApacheHttpRequest
request
,
LoadBalancedRetryPolicy
retryPolicy
,
RetryCallback
<
RibbonApacheHttpResponse
,
IOException
>
callback
)
throws
Exception
{
RetryTemplate
retryTemplate
=
new
RetryTemplate
();
RetryTemplate
retryTemplate
=
new
RetryTemplate
();
boolean
retryable
=
request
.
getContext
()
==
null
?
true
:
boolean
retryable
=
request
.
getContext
()
==
null
?
true
BooleanUtils
.
toBooleanDefaultIfNull
(
request
.
getContext
().
getRetryable
(),
true
);
:
BooleanUtils
.
toBooleanDefaultIfNull
(
request
.
getContext
().
getRetryable
(),
retryTemplate
.
setRetryPolicy
(
retryPolicy
==
null
||
!
retryable
?
new
NeverRetryPolicy
()
true
);
retryTemplate
.
setRetryPolicy
(
retryPolicy
==
null
||
!
retryable
?
new
NeverRetryPolicy
()
:
new
RetryPolicy
(
request
,
retryPolicy
,
this
,
this
.
getClientName
()));
:
new
RetryPolicy
(
request
,
retryPolicy
,
this
,
this
.
getClientName
()));
return
retryTemplate
.
execute
(
callback
);
return
retryTemplate
.
execute
(
callback
);
}
}
...
@@ -124,17 +143,18 @@ public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingH
...
@@ -124,17 +143,18 @@ public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingH
@Override
@Override
public
ServiceInstance
choose
(
String
serviceId
)
{
public
ServiceInstance
choose
(
String
serviceId
)
{
Server
server
=
this
.
getLoadBalancer
().
chooseServer
(
serviceId
);
Server
server
=
this
.
getLoadBalancer
().
chooseServer
(
serviceId
);
return
new
RibbonLoadBalancerClient
.
RibbonServer
(
serviceId
,
return
new
RibbonLoadBalancerClient
.
RibbonServer
(
serviceId
,
server
);
server
);
}
}
@Override
@Override
public
RequestSpecificRetryHandler
getRequestSpecificRetryHandler
(
RibbonApacheHttpRequest
request
,
IClientConfig
requestConfig
)
{
public
RequestSpecificRetryHandler
getRequestSpecificRetryHandler
(
RibbonApacheHttpRequest
request
,
IClientConfig
requestConfig
)
{
return
new
RequestSpecificRetryHandler
(
false
,
false
,
RetryHandler
.
DEFAULT
,
null
);
return
new
RequestSpecificRetryHandler
(
false
,
false
,
RetryHandler
.
DEFAULT
,
null
);
}
}
static
class
RetryPolicy
extends
FeignRetryPolicy
{
static
class
RetryPolicy
extends
FeignRetryPolicy
{
public
RetryPolicy
(
HttpRequest
request
,
LoadBalancedRetryPolicy
policy
,
ServiceInstanceChooser
serviceInstanceChooser
,
String
serviceName
)
{
public
RetryPolicy
(
HttpRequest
request
,
LoadBalancedRetryPolicy
policy
,
ServiceInstanceChooser
serviceInstanceChooser
,
String
serviceName
)
{
super
(
request
,
policy
,
serviceInstanceChooser
,
serviceName
);
super
(
request
,
policy
,
serviceInstanceChooser
,
serviceName
);
}
}
}
}
...
...
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClient.java
View file @
572305d7
...
@@ -38,26 +38,29 @@ import static org.springframework.cloud.netflix.ribbon.RibbonUtils.updateToHttps
...
@@ -38,26 +38,29 @@ import static org.springframework.cloud.netflix.ribbon.RibbonUtils.updateToHttps
* @author Christian Lohmann
* @author Christian Lohmann
* @author Ryan Baxter
* @author Ryan Baxter
*/
*/
//TODO: rename (ie new class that extends this in Dalston) to ApacheHttpLoadBalancingClient
//
TODO: rename (ie new class that extends this in Dalston) to ApacheHttpLoadBalancingClient
public
class
RibbonLoadBalancingHttpClient
extends
public
class
RibbonLoadBalancingHttpClient
extends
AbstractLoadBalancingClient
<
RibbonApacheHttpRequest
,
RibbonApacheHttpResponse
,
CloseableHttpClient
>
{
AbstractLoadBalancingClient
<
RibbonApacheHttpRequest
,
RibbonApacheHttpResponse
,
CloseableHttpClient
>
{
public
RibbonLoadBalancingHttpClient
(
IClientConfig
config
,
ServerIntrospector
serverIntrospector
)
{
public
RibbonLoadBalancingHttpClient
(
IClientConfig
config
,
ServerIntrospector
serverIntrospector
)
{
super
(
config
,
serverIntrospector
);
super
(
config
,
serverIntrospector
);
}
}
public
RibbonLoadBalancingHttpClient
(
CloseableHttpClient
delegate
,
IClientConfig
config
,
ServerIntrospector
serverIntrospector
)
{
public
RibbonLoadBalancingHttpClient
(
CloseableHttpClient
delegate
,
IClientConfig
config
,
ServerIntrospector
serverIntrospector
)
{
super
(
delegate
,
config
,
serverIntrospector
);
super
(
delegate
,
config
,
serverIntrospector
);
}
}
protected
CloseableHttpClient
createDelegate
(
IClientConfig
config
)
{
protected
CloseableHttpClient
createDelegate
(
IClientConfig
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
(
CommonClientConfigKey
.
MaxTotalConnections
,
0
))
.
setMaxConnTotal
(
config
.
getPropertyAsInteger
(
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
(
CommonClientConfigKey
.
MaxConnectionsPerHost
,
0
))
.
setMaxConnPerRoute
(
config
.
getPropertyAsInteger
(
.
disableCookieManagement
(
)
CommonClientConfigKey
.
MaxConnectionsPerHost
,
0
)
)
.
useSystemProperties
()
// for proxy
.
disableCookieManagement
().
useSystemProperties
()
// for proxy
.
build
();
.
build
();
}
}
...
@@ -66,12 +69,12 @@ public class RibbonLoadBalancingHttpClient extends
...
@@ -66,12 +69,12 @@ public class RibbonLoadBalancingHttpClient extends
final
IClientConfig
configOverride
)
throws
Exception
{
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
(
builder
.
setConnectTimeout
(
CommonClientConfigKey
.
ConnectTimeout
,
this
.
connectTimeout
));
config
.
get
(
CommonClientConfigKey
.
ConnectTimeout
,
this
.
connectTimeout
));
builder
.
setSocketTimeout
(
config
.
get
(
builder
.
setSocketTimeout
(
CommonClientConfigKey
.
ReadTimeout
,
this
.
readTimeout
));
config
.
get
(
CommonClientConfigKey
.
ReadTimeout
,
this
.
readTimeout
));
builder
.
setRedirectsEnabled
(
config
.
get
(
builder
.
setRedirectsEnabled
(
CommonClientConfigKey
.
FollowRedirects
,
this
.
followRedirects
));
config
.
get
(
CommonClientConfigKey
.
FollowRedirects
,
this
.
followRedirects
));
final
RequestConfig
requestConfig
=
builder
.
build
();
final
RequestConfig
requestConfig
=
builder
.
build
();
if
(
isSecure
(
configOverride
))
{
if
(
isSecure
(
configOverride
))
{
...
@@ -86,13 +89,15 @@ public class RibbonLoadBalancingHttpClient extends
...
@@ -86,13 +89,15 @@ public class RibbonLoadBalancingHttpClient extends
@Override
@Override
public
URI
reconstructURIWithServer
(
Server
server
,
URI
original
)
{
public
URI
reconstructURIWithServer
(
Server
server
,
URI
original
)
{
URI
uri
=
updateToHttpsIfNeeded
(
original
,
this
.
config
,
this
.
serverIntrospector
,
server
);
URI
uri
=
updateToHttpsIfNeeded
(
original
,
this
.
config
,
this
.
serverIntrospector
,
server
);
return
super
.
reconstructURIWithServer
(
server
,
uri
);
return
super
.
reconstructURIWithServer
(
server
,
uri
);
}
}
@Override
@Override
public
RequestSpecificRetryHandler
getRequestSpecificRetryHandler
(
RibbonApacheHttpRequest
request
,
IClientConfig
requestConfig
)
{
public
RequestSpecificRetryHandler
getRequestSpecificRetryHandler
(
return
new
RequestSpecificRetryHandler
(
false
,
false
,
RibbonApacheHttpRequest
request
,
IClientConfig
requestConfig
)
{
RetryHandler
.
DEFAULT
,
requestConfig
);
return
new
RequestSpecificRetryHandler
(
false
,
false
,
RetryHandler
.
DEFAULT
,
requestConfig
);
}
}
}
}
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyAutoConfiguration.java
View file @
572305d7
...
@@ -63,7 +63,7 @@ import org.springframework.context.annotation.Import;
...
@@ -63,7 +63,7 @@ import org.springframework.context.annotation.Import;
@Import
({
RibbonCommandFactoryConfiguration
.
RestClientRibbonConfiguration
.
class
,
@Import
({
RibbonCommandFactoryConfiguration
.
RestClientRibbonConfiguration
.
class
,
RibbonCommandFactoryConfiguration
.
OkHttpRibbonConfiguration
.
class
,
RibbonCommandFactoryConfiguration
.
OkHttpRibbonConfiguration
.
class
,
RibbonCommandFactoryConfiguration
.
HttpClientRibbonConfiguration
.
class
,
RibbonCommandFactoryConfiguration
.
HttpClientRibbonConfiguration
.
class
,
HttpClientConfiguration
.
class
})
HttpClientConfiguration
.
class
})
@ConditionalOnBean
(
ZuulProxyMarkerConfiguration
.
Marker
.
class
)
@ConditionalOnBean
(
ZuulProxyMarkerConfiguration
.
Marker
.
class
)
public
class
ZuulProxyAutoConfiguration
extends
ZuulServerAutoConfiguration
{
public
class
ZuulProxyAutoConfiguration
extends
ZuulServerAutoConfiguration
{
...
@@ -79,37 +79,42 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
...
@@ -79,37 +79,42 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
@Override
@Override
public
HasFeatures
zuulFeature
()
{
public
HasFeatures
zuulFeature
()
{
return
HasFeatures
.
namedFeature
(
"Zuul (Discovery)"
,
ZuulProxyAutoConfiguration
.
class
);
return
HasFeatures
.
namedFeature
(
"Zuul (Discovery)"
,
ZuulProxyAutoConfiguration
.
class
);
}
}
@Bean
@Bean
@ConditionalOnMissingBean
(
DiscoveryClientRouteLocator
.
class
)
@ConditionalOnMissingBean
(
DiscoveryClientRouteLocator
.
class
)
public
DiscoveryClientRouteLocator
discoveryRouteLocator
()
{
public
DiscoveryClientRouteLocator
discoveryRouteLocator
()
{
return
new
DiscoveryClientRouteLocator
(
this
.
server
.
getServletPrefix
(),
this
.
discovery
,
this
.
zuulProperties
,
return
new
DiscoveryClientRouteLocator
(
this
.
server
.
getServletPrefix
(),
this
.
serviceRouteMapper
);
this
.
discovery
,
this
.
zuulProperties
,
this
.
serviceRouteMapper
);
}
}
// pre filters
// pre filters
@Bean
@Bean
public
PreDecorationFilter
preDecorationFilter
(
RouteLocator
routeLocator
,
ProxyRequestHelper
proxyRequestHelper
)
{
public
PreDecorationFilter
preDecorationFilter
(
RouteLocator
routeLocator
,
return
new
PreDecorationFilter
(
routeLocator
,
this
.
server
.
getServletPrefix
(),
this
.
zuulProperties
,
ProxyRequestHelper
proxyRequestHelper
)
{
proxyRequestHelper
);
return
new
PreDecorationFilter
(
routeLocator
,
this
.
server
.
getServletPrefix
(),
this
.
zuulProperties
,
proxyRequestHelper
);
}
}
// route filters
// route filters
@Bean
@Bean
public
RibbonRoutingFilter
ribbonRoutingFilter
(
ProxyRequestHelper
helper
,
public
RibbonRoutingFilter
ribbonRoutingFilter
(
ProxyRequestHelper
helper
,
RibbonCommandFactory
<?>
ribbonCommandFactory
)
{
RibbonCommandFactory
<?>
ribbonCommandFactory
)
{
RibbonRoutingFilter
filter
=
new
RibbonRoutingFilter
(
helper
,
ribbonCommandFactory
,
this
.
requestCustomizers
);
RibbonRoutingFilter
filter
=
new
RibbonRoutingFilter
(
helper
,
ribbonCommandFactory
,
this
.
requestCustomizers
);
return
filter
;
return
filter
;
}
}
@Bean
@Bean
@ConditionalOnMissingBean
(
SimpleHostRoutingFilter
.
class
)
@ConditionalOnMissingBean
(
SimpleHostRoutingFilter
.
class
)
public
SimpleHostRoutingFilter
simpleHostRoutingFilter
(
ProxyRequestHelper
helper
,
ZuulProperties
zuulProperties
,
public
SimpleHostRoutingFilter
simpleHostRoutingFilter
(
ProxyRequestHelper
helper
,
ApacheHttpClientConnectionManagerFactory
connectionManagerFactory
,
ZuulProperties
zuulProperties
,
ApacheHttpClientFactory
httpClientFactory
)
{
ApacheHttpClientConnectionManagerFactory
connectionManagerFactory
,
return
new
SimpleHostRoutingFilter
(
helper
,
zuulProperties
,
connectionManagerFactory
,
httpClientFactory
);
ApacheHttpClientFactory
httpClientFactory
)
{
return
new
SimpleHostRoutingFilter
(
helper
,
zuulProperties
,
connectionManagerFactory
,
httpClientFactory
);
}
}
@Bean
@Bean
...
@@ -150,7 +155,8 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
...
@@ -150,7 +155,8 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
}
}
@Bean
@Bean
public
RoutesMvcEndpoint
zuulMvcEndpoint
(
RouteLocator
routeLocator
,
RoutesEndpoint
endpoint
)
{
public
RoutesMvcEndpoint
zuulMvcEndpoint
(
RouteLocator
routeLocator
,
RoutesEndpoint
endpoint
)
{
return
new
RoutesMvcEndpoint
(
endpoint
,
routeLocator
);
return
new
RoutesMvcEndpoint
(
endpoint
,
routeLocator
);
}
}
...
@@ -166,7 +172,8 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
...
@@ -166,7 +172,8 @@ public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration {
}
}
}
}
private
static
class
ZuulDiscoveryRefreshListener
implements
ApplicationListener
<
ApplicationEvent
>
{
private
static
class
ZuulDiscoveryRefreshListener
implements
ApplicationListener
<
ApplicationEvent
>
{
private
HeartbeatMonitor
monitor
=
new
HeartbeatMonitor
();
private
HeartbeatMonitor
monitor
=
new
HeartbeatMonitor
();
...
...
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java
View file @
572305d7
...
@@ -67,8 +67,8 @@ import static org.springframework.cloud.netflix.zuul.filters.support.FilterConst
...
@@ -67,8 +67,8 @@ import static org.springframework.cloud.netflix.zuul.filters.support.FilterConst
import
static
org
.
springframework
.
cloud
.
netflix
.
zuul
.
filters
.
support
.
FilterConstants
.
SIMPLE_HOST_ROUTING_FILTER_ORDER
;
import
static
org
.
springframework
.
cloud
.
netflix
.
zuul
.
filters
.
support
.
FilterConstants
.
SIMPLE_HOST_ROUTING_FILTER_ORDER
;
/**
/**
* Route {@link ZuulFilter} that sends requests to predetermined URLs via apache
{@link HttpClient}.
* Route {@link ZuulFilter} that sends requests to predetermined URLs via apache
* URLs are found in {@link RequestContext#getRouteHost()}.
*
{@link HttpClient}.
URLs are found in {@link RequestContext#getRouteHost()}.
*
*
* @author Spencer Gibb
* @author Spencer Gibb
* @author Dave Syer
* @author Dave Syer
...
@@ -114,8 +114,8 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
...
@@ -114,8 +114,8 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
}
}
public
SimpleHostRoutingFilter
(
ProxyRequestHelper
helper
,
ZuulProperties
properties
,
public
SimpleHostRoutingFilter
(
ProxyRequestHelper
helper
,
ZuulProperties
properties
,
ApacheHttpClientConnectionManagerFactory
connectionManagerFactory
,
ApacheHttpClientConnectionManagerFactory
connectionManagerFactory
,
ApacheHttpClientFactory
httpClientFactory
)
{
ApacheHttpClientFactory
httpClientFactory
)
{
this
.
helper
=
helper
;
this
.
helper
=
helper
;
this
.
hostProperties
=
properties
.
getHost
();
this
.
hostProperties
=
properties
.
getHost
();
this
.
sslHostnameValidationEnabled
=
properties
.
isSslHostnameValidationEnabled
();
this
.
sslHostnameValidationEnabled
=
properties
.
isSslHostnameValidationEnabled
();
...
@@ -127,9 +127,12 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
...
@@ -127,9 +127,12 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
@PostConstruct
@PostConstruct
private
void
initialize
()
{
private
void
initialize
()
{
this
.
connectionManager
=
connectionManagerFactory
.
newConnectionManager
(
this
.
sslHostnameValidationEnabled
,
this
.
connectionManager
=
connectionManagerFactory
.
newConnectionManager
(
this
.
hostProperties
.
getMaxTotalConnections
(),
this
.
hostProperties
.
getMaxPerRouteConnections
(),
this
.
sslHostnameValidationEnabled
,
this
.
hostProperties
.
getTimeToLive
(),
this
.
hostProperties
.
getTimeUnit
(),
null
);
this
.
hostProperties
.
getMaxTotalConnections
(),
this
.
hostProperties
.
getMaxPerRouteConnections
(),
this
.
hostProperties
.
getTimeToLive
(),
this
.
hostProperties
.
getTimeUnit
(),
null
);
this
.
httpClient
=
newClient
();
this
.
httpClient
=
newClient
();
this
.
connectionManagerTimer
.
schedule
(
new
TimerTask
()
{
this
.
connectionManagerTimer
.
schedule
(
new
TimerTask
()
{
@Override
@Override
...
@@ -220,9 +223,11 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
...
@@ -220,9 +223,11 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
contentType
=
ContentType
.
parse
(
request
.
getContentType
());
contentType
=
ContentType
.
parse
(
request
.
getContentType
());
}
}
InputStreamEntity
entity
=
new
InputStreamEntity
(
requestEntity
,
contentLength
,
contentType
);
InputStreamEntity
entity
=
new
InputStreamEntity
(
requestEntity
,
contentLength
,
contentType
);
HttpRequest
httpRequest
=
buildHttpRequest
(
verb
,
uri
,
entity
,
headers
,
params
,
request
);
HttpRequest
httpRequest
=
buildHttpRequest
(
verb
,
uri
,
entity
,
headers
,
params
,
request
);
try
{
try
{
log
.
debug
(
httpHost
.
getHostName
()
+
" "
+
httpHost
.
getPort
()
+
" "
log
.
debug
(
httpHost
.
getHostName
()
+
" "
+
httpHost
.
getPort
()
+
" "
+
httpHost
.
getSchemeName
());
+
httpHost
.
getSchemeName
());
...
@@ -248,30 +253,30 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
...
@@ -248,30 +253,30 @@ public class SimpleHostRoutingFilter extends ZuulFilter {
?
getEncodedQueryString
(
request
)
:
this
.
helper
.
getQueryString
(
params
));
?
getEncodedQueryString
(
request
)
:
this
.
helper
.
getQueryString
(
params
));
switch
(
verb
.
toUpperCase
())
{
switch
(
verb
.
toUpperCase
())
{
case
"POST"
:
case
"POST"
:
HttpPost
httpPost
=
new
HttpPost
(
uriWithQueryString
);
HttpPost
httpPost
=
new
HttpPost
(
uriWithQueryString
);
httpRequest
=
httpPost
;
httpRequest
=
httpPost
;
httpPost
.
setEntity
(
entity
);
httpPost
.
setEntity
(
entity
);
break
;
break
;
case
"PUT"
:
case
"PUT"
:
HttpPut
httpPut
=
new
HttpPut
(
uriWithQueryString
);
HttpPut
httpPut
=
new
HttpPut
(
uriWithQueryString
);
httpRequest
=
httpPut
;
httpRequest
=
httpPut
;
httpPut
.
setEntity
(
entity
);
httpPut
.
setEntity
(
entity
);
break
;
break
;
case
"PATCH"
:
case
"PATCH"
:
HttpPatch
httpPatch
=
new
HttpPatch
(
uriWithQueryString
);
HttpPatch
httpPatch
=
new
HttpPatch
(
uriWithQueryString
);
httpRequest
=
httpPatch
;
httpRequest
=
httpPatch
;
httpPatch
.
setEntity
(
entity
);
httpPatch
.
setEntity
(
entity
);
break
;
break
;
case
"DELETE"
:
case
"DELETE"
:
BasicHttpEntityEnclosingRequest
entityRequest
=
new
BasicHttpEntityEnclosingRequest
(
BasicHttpEntityEnclosingRequest
entityRequest
=
new
BasicHttpEntityEnclosingRequest
(
verb
,
uriWithQueryString
);
verb
,
uriWithQueryString
);
httpRequest
=
entityRequest
;
httpRequest
=
entityRequest
;
entityRequest
.
setEntity
(
entity
);
entityRequest
.
setEntity
(
entity
);
break
;
break
;
default
:
default
:
httpRequest
=
new
BasicHttpRequest
(
verb
,
uriWithQueryString
);
httpRequest
=
new
BasicHttpRequest
(
verb
,
uriWithQueryString
);
log
.
debug
(
uriWithQueryString
);
log
.
debug
(
uriWithQueryString
);
}
}
httpRequest
.
setHeaders
(
convertHeaders
(
headers
));
httpRequest
.
setHeaders
(
convertHeaders
(
headers
));
...
...
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