文章目录
- 1.结论:
- 2.源码分析
- 2.1.ClusterResolver集群解析器负责解析配置的EurekaServer地址
- 2.2 EurekaClient使用了ClusterResolver的两个实现类ZoneAffinityClusterResolver和AsyncResolver来实现注册功能
- 2.3.在DiscoveryClient初始化的时候实例化ZoneAffinityClusterResolver,然后调用getClusterEndpoints,之后将值赋值到AsyncResolver(ClosableResolver)供服务使用,将ClosableResolver赋值给EurekaHttpClientFactory
- 2.4.ResolverUtils的randomize方法,根据IP地址生成不同的集合(修改集合顺序)。
- 3.实验
- 3.1.实验 一:不同ip获得不同的集群集合
- 3.2实验2,同一ip下的应用在相同的Eureka上
1.结论:
Eureka根据IP地址将defaultZone: http://peer2:8002/eureka/,http://peer1:8001/eureka/生成不同的集合
2.源码分析
2.1.ClusterResolver集群解析器负责解析配置的EurekaServer地址
eureka:
client:
serviceUrl:
defaultZone: http://peer2:8002/eureka/,http://peer1:8001/eureka/
public interface ClusterResolver<T extends EurekaEndpoint> {
String getRegion();
List<T> getClusterEndpoints();
}
2.2 EurekaClient使用了ClusterResolver的两个实现类ZoneAffinityClusterResolver和AsyncResolver来实现注册功能
public class ZoneAffinityClusterResolver implements ClusterResolver<AwsEndpoint> {
public class AsyncResolver<T extends EurekaEndpoint> implements ClosableResolver<T> {
2.3.在DiscoveryClient初始化的时候实例化ZoneAffinityClusterResolver,然后调用getClusterEndpoints,之后将值赋值到AsyncResolver(ClosableResolver)供服务使用,将ClosableResolver赋值给EurekaHttpClientFactory
//初始化DiscoveryClient
@Singleton
public class DiscoveryClient implements EurekaClient {
private final EurekaTransport eurekaTransport;
private static final class EurekaTransport {
private ClosableResolver bootstrapResolver;
private TransportClientFactory transportClientFactory;
}
@Inject
DiscoveryClient(ApplicationInfoManager applicationInfoManager, EurekaClientConfig config, DiscoveryClientOptionalArgs args,
Provider<BackupRegistry> backupRegistryProvider) {
eurekaTransport = new EurekaTransport();
scheduleServerEndpointTask(eurekaTransport, args);
}
private void scheduleServerEndpointTask(EurekaTransport eurekaTransport,
DiscoveryClientOptionalArgs args) {
//实例化ZoneAffinityClusterResolver,然后调用getClusterEndpoints,之后将值赋值到AsyncResolver(ClosableResolver)
eurekaTransport.bootstrapResolver = EurekaHttpClients.newBootstrapResolver(
clientConfig,
transportConfig,
eurekaTransport.transportClientFactory,
applicationInfoManager.getInfo(),
applicationsSource
);
if (clientConfig.shouldRegisterWithEureka()) {
EurekaHttpClientFactory newRegistrationClientFactory = null;
EurekaHttpClient newRegistrationClient = null;
try {
//将ClosableResolver赋值给EurekaHttpClientFactory
newRegistrationClientFactory = EurekaHttpClients.registrationClientFactory(
eurekaTransport.bootstrapResolver,
eurekaTransport.transportClientFactory,
transportConfig
);
newRegistrationClient = newRegistrationClientFactory.newClient();
} catch (Exception e) {
logger.warn("Experimental transport initialization failure", e);
}
eurekaTransport.registrationClientFactory = newRegistrationClientFactory;
eurekaTransport.registrationClient = newRegistrationClient;
}
}
}
public final class EurekaHttpClients {
public static ClosableResolver<AwsEndpoint> newBootstrapResolver(
final EurekaClientConfig clientConfig,
final EurekaTransportConfig transportConfig,
final TransportClientFactory transportClientFactory,
final InstanceInfo myInstanceInfo,
final ApplicationsResolver.ApplicationsSource applicationsSource)
{
// if all else fails, return the default
return defaultBootstrapResolver(clientConfig, myInstanceInfo);
}
static ClosableResolver<AwsEndpoint> defaultBootstrapResolver(final EurekaClientConfig clientConfig,
final InstanceInfo myInstanceInfo) {
String[] availZones = clientConfig.getAvailabilityZones(clientConfig.getRegion());
String myZone = InstanceInfo.getZone(availZones, myInstanceInfo);
//初始化new ZoneAffinityClusterResolver
ClusterResolver<AwsEndpoint> delegateResolver = new ZoneAffinityClusterResolver(
new ConfigClusterResolver(clientConfig, myInstanceInfo),
myZone,
true
);
//调用ZoneAffinityClusterResolver的getClusterEndpoints计算新的initialValue
List<AwsEndpoint> initialValue = delegateResolver.getClusterEndpoints();
if (initialValue.isEmpty()) {
String msg = "Initial resolution of Eureka endpoints failed. Check ConfigClusterResolver logs for more info";
logger.error(msg);
}
//将initialValue值赋值给AsyncResolver
return new AsyncResolver<>(
EurekaClientNames.BOOTSTRAP,
delegateResolver,
initialValue,
1,
clientConfig.getEurekaServiceUrlPollIntervalSeconds() * 1000
);
}
}
public class ZoneAffinityClusterResolver implements ClusterResolver<AwsEndpoint> {
private static final Logger logger = LoggerFactory.getLogger(ZoneAffinityClusterResolver.class);
private final ClusterResolver<AwsEndpoint> delegate;
private final String myZone;
private final boolean zoneAffinity;
/**
* A zoneAffinity defines zone affinity (true) or anti-affinity rules (false).
*/
public ZoneAffinityClusterResolver(ClusterResolver<AwsEndpoint> delegate, String myZone, boolean zoneAffinity) {
this.delegate = delegate;
this.myZone = myZone;
this.zoneAffinity = zoneAffinity;
}
@Override
public String getRegion() {
return delegate.getRegion();
}
@Override
public List<AwsEndpoint> getClusterEndpoints() {
List<AwsEndpoint>[] parts = ResolverUtils.splitByZone(delegate.getClusterEndpoints(), myZone);
List<AwsEndpoint> myZoneEndpoints = parts[0];
List<AwsEndpoint> remainingEndpoints = parts[1];
List<AwsEndpoint> randomizedList = randomizeAndMerge(myZoneEndpoints, remainingEndpoints);
if (!zoneAffinity) {
Collections.reverse(randomizedList);
}
if (logger.isDebugEnabled()) {
logger.debug("Local zone={}; resolved to: {}", myZone, randomizedList);
}
return randomizedList;
}
private static List<AwsEndpoint> randomizeAndMerge(List<AwsEndpoint> myZoneEndpoints, List<AwsEndpoint> remainingEndpoints) {
if (myZoneEndpoints.isEmpty()) {
return ResolverUtils.randomize(remainingEndpoints);
}
if (remainingEndpoints.isEmpty()) {
return ResolverUtils.randomize(myZoneEndpoints);
}
List<AwsEndpoint> mergedList = ResolverUtils.randomize(myZoneEndpoints);
mergedList.addAll(ResolverUtils.randomize(remainingEndpoints));
return mergedList;
}
}
2.4.ResolverUtils的randomize方法,根据IP地址生成不同的集合(修改集合顺序)。
public final class ResolverUtils {
public static <T extends EurekaEndpoint> List<T> randomize(List<T> list) {
List<T> randomList = new ArrayList<>(list);
if (randomList.size() < 2) {
return randomList;
}
Random random = new Random(LOCAL_IPV4_ADDRESS.hashCode());
int last = randomList.size() - 1;
for (int i = 0; i < last; i++) {
int pos = random.nextInt(randomList.size() - i);
if (pos != i) {
Collections.swap(randomList, i, pos);
}
}
return randomList;
}
}
3.实验
3.1.实验 一:不同ip获得不同的集群集合
package com.example.demo.user;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class TestResolverUtils {
public static void main(String[] args) {
List<String> eurekaList = new ArrayList<>();
eurekaList.add("http://eureak0/eureka");
eurekaList.add("http://eureak1/eureka");
eurekaList.add("http://eureak2/eureka");
System.out.println("192.168.1.20"+randomize(eurekaList,"192.168.1.20"));
System.out.println("192.168.1.21"+randomize(eurekaList,"192.168.1.21"));
System.out.println("192.168.1.22"+randomize(eurekaList,"192.168.1.22"));
System.out.println("192.168.1.23"+randomize(eurekaList,"192.168.1.23"));
System.out.println("192.168.1.24"+randomize(eurekaList,"192.168.1.24"));
System.out.println("192.168.1.25"+randomize(eurekaList,"192.168.1.25"));
System.out.println("192.168.1.26"+randomize(eurekaList,"192.168.1.26"));
System.out.println("192.168.1.27"+randomize(eurekaList,"192.168.1.27"));
System.out.println("192.168.1.28"+randomize(eurekaList,"192.168.1.28"));
System.out.println("192.168.1.29"+randomize(eurekaList,"192.168.1.29"));
/**
* 192.168.1.20[http://eureak0/eureka, http://eureak1/eureka, http://eureak2/eureka]
192.168.1.21[http://eureak1/eureka, http://eureak0/eureka, http://eureak2/eureka]
192.168.1.22[http://eureak0/eureka, http://eureak1/eureka, http://eureak2/eureka]
192.168.1.23[http://eureak0/eureka, http://eureak1/eureka, http://eureak2/eureka]
192.168.1.24[http://eureak0/eureka, http://eureak1/eureka, http://eureak2/eureka]
192.168.1.25[http://eureak0/eureka, http://eureak1/eureka, http://eureak2/eureka]
192.168.1.26[http://eureak0/eureka, http://eureak1/eureka, http://eureak2/eureka]
192.168.1.27[http://eureak1/eureka, http://eureak0/eureka, http://eureak2/eureka]
192.168.1.28[http://eureak0/eureka, http://eureak1/eureka, http://eureak2/eureka]
192.168.1.29[http://eureak2/eureka, http://eureak1/eureka, http://eureak0/eureka]
*/
}
public static List<String> randomize(List<String> list,String ip) {
List<String> randomList = new ArrayList<>(list);
if (randomList.size() < 2) {
return randomList;
}
Random random = new Random(ip.hashCode());
int last = randomList.size() - 1;
for (int i = 0; i < last; i++) {
int pos = random.nextInt(randomList.size() - i);
if (pos != i) {
Collections.swap(randomList, i, pos);
}
}
return randomList;
}
}
3.2实验2,同一ip下的应用在相同的Eureka上
背景:
背景一:一个主机Ip地址172.16.20.140
根据实验一172.16.20.140将会生成以下集合,ip上的实例将首先注册到peer1
172.16.20.140[http://peer1:8001/eureka/, http://peer2:8002/eureka/]
背景二:两个Eureka
application-peer1.yml
spring:
application:
name: eureka
server:
port: 8001
eureka:
instance:
appname: ${spring.application.name}
hostname: peer1
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://peer2:8002/eureka/
application-peer2.yml
spring:
application:
name: eureka
server:
port: 8002
eureka:
instance:
appname: ${spring.application.name}
hostname: peer2
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://peer1:8001/eureka/
背景三:两个User实例注册到两个Eureka
user实例1:
spring:
application:
name: spring-cloud-user
server:
port: 8082
eureka:
client:
serviceUrl:
defaultZone: http://peer2:8002/eureka/,http://peer1:8001/eureka/
user实例2:
spring:
application:
name: spring-cloud-user
server:
port: 8083
eureka:
client:
serviceUrl:
defaultZone: http://peer2:8002/eureka/,http://peer1:8001/eureka/
观察1:启动两个Eureka,启动三个User实例观察是否注册到Peer1
观察结果:user两个实例都注册到了Peer1上
观察2:停止Peer2,观察是否两个User实例不收到影响,观察完成启动peer2
观察结果:peer2节点停止,两个User实例没有受到影响
观察3:停止Peer1,观察是否出现Peer1连接失败,重新连接到Peer2
观察结果:peer1节点停止,两个User实例都出现了连接peer1失败,重现建立peer1连接,再次失败,最后建立Peer2连接的情况。
故障开始时间:2019-10-28 14:58:26.357
故障转移时间:2019-10-28 14:58:27.492
故障转移时间为1s
user1日志
2019-10-28 14:58:25.475 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Available capacity: 49 out of 50 [{}->http://peer1:8001][null]
2019-10-28 14:58:25.475 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Creating new connection [{}->http://peer1:8001]
2019-10-28 14:58:26.357 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.MonitoredConnectionManager] -Released connection is not reusable.
2019-10-28 14:58:26.357 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Releasing connection [{}->http://peer1:8001][null]
2019-10-28 14:58:26.357 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Notifying no-one, there are no waiting threads
2019-10-28 14:58:26.357 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient] -Jersey HTTP GET http://peer1:8001/eureka//apps/delta?; statusCode=N/A
2019-10-28 14:58:26.360 [user] [DiscoveryClient-CacheRefreshExecutor-0] ERROR [com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient] -Request execution error
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187)
at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123)
at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27)
at com.sun.jersey.api.client.Client.handle(Client.java:652)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509)
at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplicationsInternal(AbstractJerseyEurekaHttpClient.java:194)
at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getDelta(AbstractJerseyEurekaHttpClient.java:170)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$7.execute(EurekaHttpClientDecorator.java:152)
at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getDelta(EurekaHttpClientDecorator.java:149)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$7.execute(EurekaHttpClientDecorator.java:152)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:89)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getDelta(EurekaHttpClientDecorator.java:149)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$7.execute(EurekaHttpClientDecorator.java:152)
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getDelta(EurekaHttpClientDecorator.java:149)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$7.execute(EurekaHttpClientDecorator.java:152)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getDelta(EurekaHttpClientDecorator.java:149)
at com.netflix.discovery.DiscoveryClient.getAndUpdateDelta(DiscoveryClient.java:1051)
at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:933)
at com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.java:1455)
at com.netflix.discovery.DiscoveryClient$CacheRefreshThread.run(DiscoveryClient.java:1422)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:120)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:179)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:612)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:447)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:117)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173)
... 29 common frames omitted
2019-10-28 14:58:26.360 [user] [DiscoveryClient-CacheRefreshExecutor-0] WARN [com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient] -Request execution failure
2019-10-28 14:58:26.360 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient] -Created client for url: http://peer1:8001/eureka/
2019-10-28 14:58:26.361 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.MonitoredConnectionManager] -Get connection: {}->http://peer1:8001, timeout = 5000
2019-10-28 14:58:26.361 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -[{}->http://peer1:8001] total kept alive: 0, total issued: 1, total allocated: 1 out of 200
2019-10-28 14:58:26.361 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -No free connections [{}->http://peer1:8001][null]
2019-10-28 14:58:26.361 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Available capacity: 49 out of 50 [{}->http://peer1:8001][null]
2019-10-28 14:58:26.361 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Creating new connection [{}->http://peer1:8001]
2019-10-28 14:58:26.479 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.MonitoredConnectionManager] -Released connection is not reusable.
2019-10-28 14:58:26.479 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Releasing connection [{}->http://peer1:8001][null]
2019-10-28 14:58:26.479 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Notifying no-one, there are no waiting threads
2019-10-28 14:58:26.479 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient] -Jersey HTTP PUT http://peer1:8001/eureka//apps/SPRING-CLOUD-USER/BR-IT-A00966.bairong.ad.com:spring-cloud-user:8082; statusCode=N/A
2019-10-28 14:58:26.479 [user] [DiscoveryClient-HeartbeatExecutor-0] ERROR [com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient] -Request execution error
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187)
at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123)
at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27)
at com.sun.jersey.api.client.Client.handle(Client.java:652)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.put(WebResource.java:529)
at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.sendHeartBeat(AbstractJerseyEurekaHttpClient.java:102)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:89)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
at com.netflix.discovery.DiscoveryClient.renew(DiscoveryClient.java:827)
at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1383)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:120)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:179)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:612)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:447)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:117)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173)
... 26 common frames omitted
2019-10-28 14:58:26.480 [user] [DiscoveryClient-HeartbeatExecutor-0] WARN [com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient] -Request execution failure
2019-10-28 14:58:26.480 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient] -Created client for url: http://peer1:8001/eureka/
2019-10-28 14:58:26.480 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.MonitoredConnectionManager] -Get connection: {}->http://peer1:8001, timeout = 5000
2019-10-28 14:58:26.480 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -[{}->http://peer1:8001] total kept alive: 0, total issued: 1, total allocated: 1 out of 200
2019-10-28 14:58:26.480 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -No free connections [{}->http://peer1:8001][null]
2019-10-28 14:58:26.480 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Available capacity: 49 out of 50 [{}->http://peer1:8001][null]
2019-10-28 14:58:26.480 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Creating new connection [{}->http://peer1:8001]
2019-10-28 14:58:27.375 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.MonitoredConnectionManager] -Released connection is not reusable.
2019-10-28 14:58:27.375 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Releasing connection [{}->http://peer1:8001][null]
2019-10-28 14:58:27.376 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Notifying no-one, there are no waiting threads
2019-10-28 14:58:27.376 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient] -Jersey HTTP GET http://peer1:8001/eureka//apps/delta?; statusCode=N/A
2019-10-28 14:58:27.376 [user] [DiscoveryClient-CacheRefreshExecutor-0] ERROR [com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient] -Request execution error
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187)
at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123)
at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27)
at com.sun.jersey.api.client.Client.handle(Client.java:652)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509)
at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplicationsInternal(AbstractJerseyEurekaHttpClient.java:194)
at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getDelta(AbstractJerseyEurekaHttpClient.java:170)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$7.execute(EurekaHttpClientDecorator.java:152)
at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getDelta(EurekaHttpClientDecorator.java:149)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$7.execute(EurekaHttpClientDecorator.java:152)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getDelta(EurekaHttpClientDecorator.java:149)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$7.execute(EurekaHttpClientDecorator.java:152)
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getDelta(EurekaHttpClientDecorator.java:149)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$7.execute(EurekaHttpClientDecorator.java:152)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getDelta(EurekaHttpClientDecorator.java:149)
at com.netflix.discovery.DiscoveryClient.getAndUpdateDelta(DiscoveryClient.java:1051)
at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:933)
at com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.java:1455)
at com.netflix.discovery.DiscoveryClient$CacheRefreshThread.run(DiscoveryClient.java:1422)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:120)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:179)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:612)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:447)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:117)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173)
... 30 common frames omitted
2019-10-28 14:58:27.377 [user] [DiscoveryClient-CacheRefreshExecutor-0] WARN [com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient] -Request execution failure
2019-10-28 14:58:27.379 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient] -Created client for url: http://peer2:8002/eureka/
2019-10-28 14:58:27.379 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.MonitoredConnectionManager] -Get connection: {}->http://peer2:8002, timeout = 5000
2019-10-28 14:58:27.379 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -[{}->http://peer2:8002] total kept alive: 0, total issued: 1, total allocated: 1 out of 200
2019-10-28 14:58:27.379 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -No free connections [{}->http://peer2:8002][null]
2019-10-28 14:58:27.380 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Available capacity: 50 out of 50 [{}->http://peer2:8002][null]
2019-10-28 14:58:27.380 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Creating new connection [{}->http://peer2:8002]
2019-10-28 14:58:27.389 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.MonitoredConnectionManager] -Released connection is reusable.
2019-10-28 14:58:27.389 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Releasing connection [{}->http://peer2:8002][null]
2019-10-28 14:58:27.390 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Pooling connection [{}->http://peer2:8002][null]; keep alive indefinitely
2019-10-28 14:58:27.390 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Notifying no-one, there are no waiting threads
2019-10-28 14:58:27.390 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient] -Jersey HTTP GET http://peer2:8002/eureka//apps/delta?; statusCode=200
2019-10-28 14:58:27.390 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient] -Pinning to endpoint null
2019-10-28 14:58:27.390 [user] [DiscoveryClient-CacheRefreshExecutor-0] INFO [com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient] -Request execution succeeded on retry #2
2019-10-28 14:58:27.391 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.DiscoveryClient] -Got delta update with apps hashcode UP_2_
2019-10-28 14:58:27.391 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.DiscoveryClient] -Added instance BR-IT-A00966.bairong.ad.com:spring-cloud-user:8083 to the existing apps in region null
2019-10-28 14:58:27.391 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.DiscoveryClient] -Added instance BR-IT-A00966.bairong.ad.com:spring-cloud-user:8082 to the existing apps in region null
2019-10-28 14:58:27.391 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.DiscoveryClient] -The total number of instances fetched by the delta processor : 2
2019-10-28 14:58:27.391 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.DiscoveryClient] -The total number of all instances in the client now is 2
2019-10-28 14:58:27.392 [user] [DiscoveryClient-CacheRefreshExecutor-0] DEBUG [com.netflix.discovery.DiscoveryClient] -Completed cache refresh task for discovery. All Apps hash code is Local region apps hashcode: UP_2_, is fetching remote regions? false
2019-10-28 14:58:27.491 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.MonitoredConnectionManager] -Released connection is not reusable.
2019-10-28 14:58:27.491 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Releasing connection [{}->http://peer1:8001][null]
2019-10-28 14:58:27.491 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Notifying no-one, there are no waiting threads
2019-10-28 14:58:27.491 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient] -Jersey HTTP PUT http://peer1:8001/eureka//apps/SPRING-CLOUD-USER/BR-IT-A00966.bairong.ad.com:spring-cloud-user:8082; statusCode=N/A
2019-10-28 14:58:27.491 [user] [DiscoveryClient-HeartbeatExecutor-0] ERROR [com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient] -Request execution error
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187)
at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123)
at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27)
at com.sun.jersey.api.client.Client.handle(Client.java:652)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.put(WebResource.java:529)
at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.sendHeartBeat(AbstractJerseyEurekaHttpClient.java:102)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89)
at com.netflix.discovery.DiscoveryClient.renew(DiscoveryClient.java:827)
at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1383)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:120)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:179)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:612)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:447)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:117)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173)
... 27 common frames omitted
2019-10-28 14:58:27.491 [user] [DiscoveryClient-HeartbeatExecutor-0] WARN [com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient] -Request execution failure
2019-10-28 14:58:27.492 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient] -Created client for url: http://peer2:8002/eureka/
2019-10-28 14:58:27.492 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.MonitoredConnectionManager] -Get connection: {}->http://peer2:8002, timeout = 5000
2019-10-28 14:58:27.492 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -[{}->http://peer2:8002] total kept alive: 1, total issued: 0, total allocated: 1 out of 200
2019-10-28 14:58:27.492 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Getting free connection [{}->http://peer2:8002][null]
2019-10-28 14:58:27.497 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.MonitoredConnectionManager] -Released connection is reusable.
2019-10-28 14:58:27.497 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Releasing connection [{}->http://peer2:8002][null]
2019-10-28 14:58:27.497 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Pooling connection [{}->http://peer2:8002][null]; keep alive indefinitely
2019-10-28 14:58:27.497 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.NamedConnectionPool] -Notifying no-one, there are no waiting threads
2019-10-28 14:58:27.497 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient] -Jersey HTTP PUT http://peer2:8002/eureka//apps/SPRING-CLOUD-USER/BR-IT-A00966.bairong.ad.com:spring-cloud-user:8082; statusCode=200
2019-10-28 14:58:27.498 [user] [DiscoveryClient-HeartbeatExecutor-0] DEBUG [com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient] -Pinning to endpoint null
2019-10-28 14:58:27.498 [user] [DiscoveryClient-HeartbeatExecutor-0] INFO [com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient] -Request execution succeeded on retry #2