Skip to content

Commit 9c566de

Browse files
committed
Compatible chassis multi-registration center
1 parent 874cbd8 commit 9c566de

File tree

1 file changed

+29
-8
lines changed
  • service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc

1 file changed

+29
-8
lines changed

service-registry/registry-service-center/src/main/java/org/apache/servicecomb/registry/sc/SCClientUtils.java

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717

1818
package org.apache.servicecomb.registry.sc;
1919

20+
import java.util.ArrayList;
21+
import java.util.Collections;
2022
import java.util.HashMap;
2123
import java.util.List;
2224
import java.util.Map;
25+
import java.util.concurrent.ConcurrentHashMap;
2326

2427
import org.apache.http.HttpHost;
2528
import org.apache.http.auth.AuthScope;
@@ -50,7 +53,8 @@
5053
public class SCClientUtils {
5154
private static final Logger LOGGER = LoggerFactory.getLogger(SCClientUtils.class);
5255

53-
private static volatile ServiceCenterAddressManager serviceAddressManager;
56+
// Compatible chassis multi-registration center
57+
private static final Map<String, ServiceCenterAddressManager> serviceAddressManagers = new ConcurrentHashMap<>();
5458

5559
public static ServiceCenterAddressManager createAddressManager(SCConfigurationProperties discoveryProperties,
5660
Environment environment) {
@@ -70,18 +74,35 @@ public static ServiceCenterAddressManager createAddressManager(SCConfigurationPr
7074
*/
7175
public static ServiceCenterAddressManager createAddressManager(String projectName, List<String> addresses,
7276
Environment environment) {
73-
if (serviceAddressManager == null) {
77+
String region = environment.getProperty("servicecomb.datacenter.region");
78+
String availableZone = environment.getProperty("servicecomb.datacenter.availableZone");
79+
if (getServiceCenterAddressManager(addresses) == null) {
7480
synchronized (SCClientUtils.class) {
75-
if (serviceAddressManager == null) {
81+
if (getServiceCenterAddressManager(addresses) == null) {
82+
String key = String.join(",", addresses);
7683
LOGGER.info("initialize discovery server={}", addresses);
77-
String region = environment.getProperty("servicecomb.datacenter.region");
78-
String availableZone = environment.getProperty("servicecomb.datacenter.availableZone");
79-
serviceAddressManager = new ServiceCenterAddressManager(projectName, addresses, EventManager.getEventBus(),
80-
region, availableZone);
84+
ServiceCenterAddressManager addressManager = new ServiceCenterAddressManager(projectName, addresses,
85+
EventManager.getEventBus(), region, availableZone);
86+
serviceAddressManagers.put(key, addressManager);
87+
return addressManager;
8188
}
8289
}
8390
}
84-
return serviceAddressManager;
91+
return getServiceCenterAddressManager(addresses);
92+
}
93+
94+
private static ServiceCenterAddressManager getServiceCenterAddressManager(List<String> addresses) {
95+
String forwardKey = String.join(",", addresses);
96+
List<String> tempAddr = new ArrayList<>(addresses);
97+
Collections.reverse(tempAddr);
98+
String reverseKey = String.join(",", addresses);
99+
if (serviceAddressManagers.get(forwardKey) != null) {
100+
return serviceAddressManagers.get(forwardKey);
101+
}
102+
if (serviceAddressManagers.get(reverseKey) != null) {
103+
return serviceAddressManagers.get(reverseKey);
104+
}
105+
return null;
85106
}
86107

87108
// add other headers needed for registration by new ServiceCenterClient(...)

0 commit comments

Comments
 (0)