1717package com .ctrip .framework .apollo .openapi .client ;
1818
1919import com .ctrip .framework .apollo .openapi .client .constant .ApolloOpenApiConstants ;
20+ import com .ctrip .framework .apollo .openapi .client .extend .ApolloStandardHttpRequestRetryHandler ;
2021import com .ctrip .framework .apollo .openapi .client .service .AppOpenApiService ;
2122import com .ctrip .framework .apollo .openapi .client .service .ClusterOpenApiService ;
2223import com .ctrip .framework .apollo .openapi .client .service .ItemOpenApiService ;
@@ -55,10 +56,11 @@ public class ApolloOpenApiClient {
5556 private final InstanceOpenApiService instanceService ;
5657 private static final Gson GSON = new GsonBuilder ().setDateFormat (ApolloOpenApiConstants .JSON_DATE_FORMAT ).create ();
5758
58- private ApolloOpenApiClient (String portalUrl , String token , RequestConfig requestConfig ) {
59+ private ApolloOpenApiClient (String portalUrl , String token , RequestConfig requestConfig , int retryCount ) {
5960 this .portalUrl = portalUrl ;
6061 this .token = token ;
6162 CloseableHttpClient client = HttpClients .custom ().setDefaultRequestConfig (requestConfig )
63+ .setRetryHandler (retryCount > 0 ? new ApolloStandardHttpRequestRetryHandler (retryCount ) : null )
6264 .setDefaultHeaders (Lists .newArrayList (new BasicHeader ("Authorization" , token ))).build ();
6365
6466 String baseUrl = this .portalUrl + ApolloOpenApiConstants .OPEN_API_V1_PREFIX ;
@@ -273,6 +275,7 @@ public static class ApolloOpenApiClientBuilder {
273275 private String token ;
274276 private int connectTimeout = -1 ;
275277 private int readTimeout = -1 ;
278+ private int retryCount = -1 ;
276279
277280 /**
278281 * @param portalUrl The apollo portal url, e.g http://localhost:8070
@@ -306,6 +309,11 @@ public ApolloOpenApiClientBuilder withReadTimeout(int readTimeout) {
306309 return this ;
307310 }
308311
312+ public ApolloOpenApiClientBuilder withRetryCount (int retryCount ) {
313+ this .retryCount = retryCount ;
314+ return this ;
315+ }
316+
309317 public ApolloOpenApiClient build () {
310318 Preconditions .checkArgument (!Strings .isNullOrEmpty (portalUrl ), "Portal url should not be null or empty!" );
311319 Preconditions .checkArgument (portalUrl .startsWith ("http://" ) || portalUrl .startsWith ("https://" ), "Portal url should start with http:// or https://" );
@@ -322,7 +330,7 @@ public ApolloOpenApiClient build() {
322330 RequestConfig requestConfig = RequestConfig .custom ().setConnectTimeout (connectTimeout )
323331 .setSocketTimeout (readTimeout ).build ();
324332
325- return new ApolloOpenApiClient (portalUrl , token , requestConfig );
333+ return new ApolloOpenApiClient (portalUrl , token , requestConfig , retryCount );
326334 }
327335 }
328336}
0 commit comments