Skip to content

Commit e040efe

Browse files
refactor(loadbalance): Refactor load balancing filter enabling logic (#4709)
* refactor(loadbalance): 重构负载均衡过滤器启用逻辑 -优化了 InstancePropertyDiscoveryFilter、PriorityInstancePropertyDiscoveryFilter 和 ZoneAwareDiscoveryFilter 的启用逻辑 - 使用 DynamicProperties 替代 Environment 获取配置属性 - 添加了对配置属性的缓存,避免重复获取 - 调整了配置属性的默认值 * test(foundation-registry): 重构测试用例中环境属性的获取 - 引入 DynamicProperties 类以替代 Environment 类 - 使用动态属性获取替代静态属性获取 - 增加对属性默认值的处理 * refactor(registry): 重构发现过滤器中的属性获取方式 - 将 Environment 和 DynamicProperties 的使用方式统一为 DynamicProperties -优化了属性获取逻辑,使用动态属性替换静态属性 - 移除了冗余代码,提高了代码的可读性和可维护性 * refactor(loadbalance): 使用 DynamicProperties 替代 Environment - 在 ZoneAwareDiscoveryFilter 中引入 DynamicProperties以替代 Environment - 更新相关测试用例,使用 DynamicProperties 进行配置模拟 - 移除 TestDiscoveryTree 中的冗余代码 - 优化测试用例中的断言逻辑 * refactor(loadbalance): 重构优先级实例属性发现过滤器 - 移除了 PriorityInstancePropertyDiscoveryFilter 类中的冗余代码 - 更新了单元测试,使用 DynamicProperties替代 Environment 获取配置属性 - 优化了测试代码,提高了可维护性和可读性 * refactor(loadbalance): 优化负载均衡过滤器配置 - 将字符串键值对配置改为静态常量 - 更新配置获取方式,使用静态常量作为键 - 优化配置类结构,提高可读性和维护性 * fix(config-etcd): 修复 EtcdConfig 默认连接字符串并统一命名风格 - 将 EtcdConfig 类中的属性名称从连字符风格改为驼峰风格 - 修改默认连接字符串从 ZooKeeper 地址改为 Etcd 默认地址 - 在 demo-etcd 的 pom 文件中添加新的配置属性
1 parent ed1d1f9 commit e040efe

File tree

15 files changed

+154
-67
lines changed

15 files changed

+154
-67
lines changed

demo/demo-etcd/consumer/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@
4444
<groupId>org.apache.servicecomb</groupId>
4545
<artifactId>registry-etcd</artifactId>
4646
</dependency>
47+
<dependency>
48+
<groupId>org.apache.servicecomb</groupId>
49+
<artifactId>config-etcd</artifactId>
50+
</dependency>
4751
</dependencies>
4852

4953
<build>

demo/demo-etcd/consumer/src/main/resources/application.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ servicecomb:
2525
registry:
2626
etcd:
2727
connectString: http://127.0.0.1:2379
28+
config:
29+
etcd:
30+
connectString: http://127.0.0.1:2379
2831

2932
rest:
3033
address: 0.0.0.0:9092?websocketEnabled=true

demo/demo-etcd/test-client/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@
128128
<env>
129129
<JAVA_OPTS>
130130
-Dservicecomb.registry.etcd.connectString=http://etcd:2379
131+
-Dservicecomb.config.etcd.connectString=http://etcd:2379
131132
</JAVA_OPTS>
132133
<JAR_PATH>/maven/maven/etcd-consumer-${project.version}.jar</JAR_PATH>
133134
</env>

dynamic-config/config-etcd/src/main/java/org/apache/servicecomb/config/etcd/EtcdConfig.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@
2121
public class EtcdConfig {
2222
public static final String ZOOKEEPER_DEFAULT_ENVIRONMENT = "production";
2323

24-
public static final String PROPERTY_CONNECT_STRING = "servicecomb.config.etcd.connect-string";
24+
public static final String PROPERTY_CONNECT_STRING = "servicecomb.config.etcd.connectString";
2525

26-
public static final String PROPERTY_SESSION_TIMEOUT = "servicecomb.config.etcd.session-timeout-millis";
26+
public static final String PROPERTY_SESSION_TIMEOUT = "servicecomb.config.etcd.sessionTimeoutMillis";
2727

28-
public static final String PROPERTY_CONNECTION_TIMEOUT = "servicecomb.config.etcd.connection-timeout-mills";
28+
public static final String PROPERTY_CONNECTION_TIMEOUT = "servicecomb.config.etcd.connectionTimeoutMills";
2929

30-
public static final String PROPERTY_AUTH_SCHEMA = "servicecomb.config.etcd.authentication-schema";
30+
public static final String PROPERTY_AUTH_SCHEMA = "servicecomb.config.etcd.authenticationSchema";
3131

32-
public static final String PROPERTY_AUTH_INFO = "servicecomb.config.etcd.authentication-info";
32+
public static final String PROPERTY_AUTH_INFO = "servicecomb.config.etcd.authenticationInfo";
3333

34-
public static final String PROPERTY_INSTANCE_TAG = "servicecomb.config.etcd.instance-tag";
34+
public static final String PROPERTY_INSTANCE_TAG = "servicecomb.config.etcd.instanceTag";
3535

3636
private final Environment environment;
3737

@@ -40,7 +40,7 @@ public EtcdConfig(Environment environment) {
4040
}
4141

4242
public String getConnectString() {
43-
return environment.getProperty(PROPERTY_CONNECT_STRING, "127.0.0.1:2181");
43+
return environment.getProperty(PROPERTY_CONNECT_STRING, "http://127.0.0.1:2379");
4444
}
4545

4646
public int getSessionTimeoutMillis() {

foundations/foundation-config/src/main/java/org/apache/servicecomb/config/DynamicPropertiesImpl.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717

1818
package org.apache.servicecomb.config;
1919

20-
import java.util.HashMap;
2120
import java.util.HashSet;
2221
import java.util.Map;
2322
import java.util.Map.Entry;
2423
import java.util.Set;
24+
import java.util.concurrent.ConcurrentHashMap;
2525
import java.util.function.Consumer;
2626
import java.util.function.DoubleConsumer;
2727
import java.util.function.IntConsumer;
@@ -44,17 +44,17 @@ private static class Holder<C, D> {
4444
}
4545
}
4646

47-
private final Map<String, Set<Holder<Consumer<String>, String>>> stringCallbacks = new HashMap<>();
47+
private final Map<String, Set<Holder<Consumer<String>, String>>> stringCallbacks = new ConcurrentHashMap<>();
4848

49-
private final Map<String, Set<Holder<IntConsumer, Integer>>> intCallbacks = new HashMap<>();
49+
private final Map<String, Set<Holder<IntConsumer, Integer>>> intCallbacks = new ConcurrentHashMap<>();
5050

51-
private final Map<String, Set<Holder<LongConsumer, Long>>> longCallbacks = new HashMap<>();
51+
private final Map<String, Set<Holder<LongConsumer, Long>>> longCallbacks = new ConcurrentHashMap<>();
5252

53-
private final Map<String, Set<Holder<DoubleConsumer, Float>>> floatCallbacks = new HashMap<>();
53+
private final Map<String, Set<Holder<DoubleConsumer, Float>>> floatCallbacks = new ConcurrentHashMap<>();
5454

55-
private final Map<String, Set<Holder<DoubleConsumer, Double>>> doubleCallbacks = new HashMap<>();
55+
private final Map<String, Set<Holder<DoubleConsumer, Double>>> doubleCallbacks = new ConcurrentHashMap<>();
5656

57-
private final Map<String, Set<Holder<Consumer<Boolean>, Boolean>>> booleanCallbacks = new HashMap<>();
57+
private final Map<String, Set<Holder<Consumer<Boolean>, Boolean>>> booleanCallbacks = new ConcurrentHashMap<>();
5858

5959
private final Environment environment;
6060

foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/AbstractDiscoveryFilter.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,21 @@
1919

2020
import java.util.ArrayList;
2121

22+
import org.apache.servicecomb.config.DynamicProperties;
2223
import org.slf4j.Logger;
2324
import org.slf4j.LoggerFactory;
2425
import org.springframework.beans.factory.annotation.Autowired;
25-
import org.springframework.core.env.Environment;
2626

2727
public abstract class AbstractDiscoveryFilter implements DiscoveryFilter {
2828
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractDiscoveryFilter.class);
2929

30-
protected Environment environment;
30+
protected Boolean enabled;
31+
32+
protected DynamicProperties dynamicProperties;
3133

3234
@Autowired
33-
public void setEnvironment(Environment environment) {
34-
this.environment = environment;
35+
public void setDynamicProperties(DynamicProperties dynamicProperties) {
36+
this.dynamicProperties = dynamicProperties;
3537
}
3638

3739
@Override

foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/discovery/InstanceStatusDiscoveryFilter.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,22 @@ public class InstanceStatusDiscoveryFilter extends AbstractGroupDiscoveryFilter
3232

3333
public static final String GROUP_SIZE = "status_group_size";
3434

35+
public static final String SERVICECOMB_LOADBALANCE_FILTER_STATUS_ENABLED = "servicecomb.loadbalance.filter.status.enabled";
36+
3537
@Override
3638
public int getOrder() {
3739
return -10000;
3840
}
3941

4042
@Override
4143
public boolean enabled() {
42-
return environment.getProperty("servicecomb.loadbalance.filter.status.enabled", Boolean.class, true);
44+
45+
if (enabled == null) {
46+
enabled = dynamicProperties.getBooleanProperty(SERVICECOMB_LOADBALANCE_FILTER_STATUS_ENABLED,
47+
value -> enabled = value,
48+
true);
49+
}
50+
return enabled;
4351
}
4452

4553
@Override

foundations/foundation-registry/src/test/java/org/apache/servicecomb/registry/discovery/TestDiscoveryTree.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.concurrent.TimeUnit;
2525
import java.util.concurrent.atomic.AtomicInteger;
2626

27+
import org.apache.servicecomb.config.DynamicProperties;
2728
import org.apache.servicecomb.foundation.common.cache.VersionedCache;
2829
import org.apache.servicecomb.foundation.common.exceptions.ServiceCombException;
2930
import org.apache.servicecomb.registry.DiscoveryManager;
@@ -32,7 +33,6 @@
3233
import org.junit.jupiter.api.BeforeEach;
3334
import org.junit.jupiter.api.Test;
3435
import org.mockito.Mockito;
35-
import org.springframework.core.env.Environment;
3636

3737
public class TestDiscoveryTree {
3838
DiscoveryContext context = new DiscoveryContext();
@@ -238,11 +238,12 @@ public void test_one_service_concurrent_correct() throws Exception {
238238
DiscoveryTree discoveryTree = new DiscoveryTree(discoveryManager);
239239
DiscoveryContext discoveryContext = new DiscoveryContext();
240240
InstanceStatusDiscoveryFilter filter = new InstanceStatusDiscoveryFilter();
241-
Environment environment = Mockito.mock(Environment.class);
242-
Mockito.when(environment
243-
.getProperty("servicecomb.loadbalance.filter.status.enabled", Boolean.class, true))
241+
DynamicProperties dynamicProperties = Mockito.mock(DynamicProperties.class);
242+
Mockito.when(dynamicProperties.getBooleanProperty(Mockito.eq("servicecomb.loadbalance.filter.status.enabled"),
243+
Mockito.any(),
244+
Mockito.eq(true)))
244245
.thenReturn(true);
245-
filter.setEnvironment(environment);
246+
filter.setDynamicProperties(dynamicProperties);
246247
discoveryTree.setDiscoveryFilters(List.of(filter));
247248

248249
StatefulDiscoveryInstance instance1 = Mockito.mock(StatefulDiscoveryInstance.class);

handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
/**
2727
* configuration items
28-
*
2928
*/
3029
public final class Configuration {
3130
//// 2.1 configuration items

handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/filter/InstancePropertyDiscoveryFilter.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,28 @@
3030
import org.apache.servicecomb.registry.discovery.StatefulDiscoveryInstance;
3131

3232
/**
33-
* Instance property based filter
33+
* Instance property based filter
3434
*/
3535
public class InstancePropertyDiscoveryFilter extends AbstractDiscoveryFilter {
36+
3637
private static final String MATCHED = "matched";
3738

39+
public static final String SERVICECOMB_LOADBALANCE_FILTER_INSTANCE_PROPERTY_ENABLED = "servicecomb.loadbalance.filter.instanceProperty.enabled";
40+
3841
@Override
3942
public int getOrder() {
4043
return 400;
4144
}
4245

4346
@Override
4447
public boolean enabled() {
45-
return environment.getProperty("servicecomb.loadbalance.filter.instanceProperty.enabled",
46-
boolean.class, true);
48+
49+
if (enabled == null) {
50+
enabled = dynamicProperties.getBooleanProperty(SERVICECOMB_LOADBALANCE_FILTER_INSTANCE_PROPERTY_ENABLED,
51+
value -> enabled = value,
52+
true);
53+
}
54+
return enabled;
4755
}
4856

4957
@Override

0 commit comments

Comments
 (0)