Skip to content

Commit a4cc665

Browse files
fix:fix consul heartbeat read timeout. (#640)
1 parent 3602ead commit a4cc665

File tree

2 files changed

+75
-1
lines changed

2 files changed

+75
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Tencent is pleased to support the open source community by making polaris-java available.
3+
*
4+
* Copyright (C) 2021 Tencent. All rights reserved.
5+
*
6+
* Licensed under the BSD 3-Clause License (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* https://opensource.org/licenses/BSD-3-Clause
11+
*
12+
* Unless required by applicable law or agreed to in writing, software distributed
13+
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
14+
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
15+
* specific language governing permissions and limitations under the License.
16+
*/
17+
18+
package com.ecwid.consul.transport;
19+
20+
import org.apache.http.client.HttpClient;
21+
import org.apache.http.client.config.RequestConfig;
22+
import org.apache.http.impl.client.HttpClientBuilder;
23+
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
24+
25+
/**
26+
* Transport for TTL.
27+
*
28+
* @author Haotian Zhang
29+
*/
30+
public class TtlHttpTransport extends AbstractHttpTransport {
31+
32+
private final HttpClient httpClient;
33+
34+
static final int DEFAULT_TTL_READ_TIMEOUT = 5 * 1000; // 5s
35+
static final int DEFAULT_CONNECTION_TIMEOUT = 5 * 1000; // 5s
36+
37+
public TtlHttpTransport() {
38+
this(DEFAULT_TTL_READ_TIMEOUT);
39+
}
40+
41+
public TtlHttpTransport(int ttlReadTimeout) {
42+
if (ttlReadTimeout == 0) {
43+
ttlReadTimeout = DEFAULT_TTL_READ_TIMEOUT;
44+
}
45+
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
46+
connectionManager.setMaxTotal(DEFAULT_MAX_CONNECTIONS);
47+
connectionManager.setDefaultMaxPerRoute(DEFAULT_MAX_PER_ROUTE_CONNECTIONS);
48+
49+
RequestConfig requestConfig = RequestConfig.custom().
50+
setConnectTimeout(DEFAULT_CONNECTION_TIMEOUT).
51+
setConnectionRequestTimeout(DEFAULT_CONNECTION_TIMEOUT).
52+
setSocketTimeout(ttlReadTimeout).
53+
build();
54+
55+
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create().
56+
setConnectionManager(connectionManager).
57+
setDefaultRequestConfig(requestConfig).
58+
useSystemProperties();
59+
60+
this.httpClient = httpClientBuilder.build();
61+
}
62+
63+
@Override
64+
public HttpClient getHttpClient() {
65+
return httpClient;
66+
}
67+
}

polaris-plugins/polaris-plugins-connector/connector-consul/src/main/java/com/tencent/polaris/plugins/connector/consul/ConsulAPIConnector.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.ecwid.consul.SingleUrlParameters;
2222
import com.ecwid.consul.UrlParameters;
2323
import com.ecwid.consul.transport.HttpResponse;
24+
import com.ecwid.consul.transport.TtlHttpTransport;
2425
import com.ecwid.consul.v1.ConsulClient;
2526
import com.ecwid.consul.v1.ConsulRawClient;
2627
import com.ecwid.consul.v1.OperationException;
@@ -98,6 +99,10 @@ public class ConsulAPIConnector extends DestroyableServerConnector {
9899

99100
private ConsulRawClient consulRawClient;
100101

102+
private ConsulClient ttlConsulClient;
103+
104+
private ConsulRawClient ttlConsulRawClient;
105+
101106
private ConsulContext consulContext;
102107

103108
private ObjectMapper mapper;
@@ -185,6 +190,8 @@ private void initActually(InitContext ctx, ServerConnectorConfig connectorConfig
185190
LOG.debug("Consul Server : [{}]", address);
186191
consulRawClient = new ConsulRawClient(agentHost, agentPort);
187192
consulClient = new ConsulClient(consulRawClient);
193+
ttlConsulRawClient = new ConsulRawClient(agentHost, agentPort, new TtlHttpTransport().getHttpClient());
194+
ttlConsulClient = new ConsulClient(ttlConsulRawClient);
188195

189196
// Init context.
190197
consulContext = new ConsulContext();
@@ -412,7 +419,7 @@ public void heartbeat(CommonProviderRequest req) throws PolarisException {
412419
if (ieRegistered) {
413420
ServiceKey serviceKey = new ServiceKey(req.getNamespace(), req.getService());
414421
try {
415-
this.consulClient.agentCheckPass(consulContext.getCheckId(), null, consulContext.getAclToken());
422+
this.ttlConsulClient.agentCheckPass(consulContext.getCheckId(), null, consulContext.getAclToken());
416423
if (LOG.isDebugEnabled()) {
417424
LOG.debug("Heartbeat service to Consul: " + consulContext.getCheckId());
418425
}

0 commit comments

Comments
 (0)