Skip to content

Commit 7df3365

Browse files
committed
添加灰度热开关
1 parent 903ae12 commit 7df3365

File tree

7 files changed

+81
-1
lines changed

7 files changed

+81
-1
lines changed

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/DefaultGrayManager.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ public void shutdown() {
5252
updateTimer.cancel();
5353
}
5454

55+
56+
@Override
57+
public boolean hasGray(String serviceId) {
58+
return GrayClientHolder.getGraySwitcher().judge() && super.hasGray(serviceId);
59+
}
60+
5561
public void openForWork() {
5662
if (getGrayInformationClient() != null) {
5763
log.info("拉取灰度列表");

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientHolder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cn.springcloud.gray;
22

3+
import cn.springcloud.gray.client.switcher.GraySwitcher;
34
import cn.springcloud.gray.request.LocalStorageLifeCycle;
45
import cn.springcloud.gray.request.RequestLocalStorage;
56
import cn.springcloud.gray.servernode.ServerExplainer;
@@ -12,6 +13,7 @@ public class GrayClientHolder {
1213
private static LocalStorageLifeCycle localStorageLifeCycle;
1314
private static ServerExplainer<?> serverExplainer;
1415
private static ServerListProcessor<?> serverListProcessor;
16+
private static GraySwitcher graySwitcher = new GraySwitcher.DefaultGraySwitcher();
1517

1618
public static GrayManager getGrayManager() {
1719
return grayManager;
@@ -52,4 +54,12 @@ public static void setServerListProcessor(ServerListProcessor<?> serverListProce
5254
public static <SERVER> ServerListProcessor<SERVER> getServereListProcessor() {
5355
return (ServerListProcessor<SERVER>) serverListProcessor;
5456
}
57+
58+
public static GraySwitcher getGraySwitcher() {
59+
return graySwitcher;
60+
}
61+
62+
public static void setGraySwitcher(GraySwitcher graySwitcher) {
63+
GrayClientHolder.graySwitcher = graySwitcher;
64+
}
5565
}

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientInitializer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cn.springcloud.gray;
22

3+
import cn.springcloud.gray.client.switcher.GraySwitcher;
34
import cn.springcloud.gray.request.LocalStorageLifeCycle;
45
import cn.springcloud.gray.request.RequestLocalStorage;
56
import cn.springcloud.gray.servernode.ServerExplainer;
@@ -24,6 +25,8 @@ public void afterPropertiesSet() throws Exception {
2425
GrayClientHolder.setServerExplainer(getBean("serverExplainer", ServerExplainer.class));
2526
GrayClientHolder.setServerListProcessor(
2627
getBean("serverListProcessor", ServerListProcessor.class, new ServerListProcessor.Default()));
28+
GrayClientHolder.setGraySwitcher(getBean(
29+
"graySwitcher", GraySwitcher.class, new GraySwitcher.DefaultGraySwitcher()));
2730

2831
initGrayManagerRequestInterceptors();
2932

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientAutoConfiguration.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import cn.springcloud.gray.cache.CaffeineCache;
55
import cn.springcloud.gray.client.GrayClientEnrollInitializingDestroyBean;
66
import cn.springcloud.gray.client.config.properties.*;
7+
import cn.springcloud.gray.client.switcher.EnbGraySwitcher;
8+
import cn.springcloud.gray.client.switcher.GraySwitcher;
79
import cn.springcloud.gray.communication.InformationClient;
810
import cn.springcloud.gray.decision.GrayDecision;
911
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
@@ -24,7 +26,8 @@
2426

2527
@Configuration
2628
@EnableConfigurationProperties(
27-
{GrayClientProperties.class,
29+
{GrayProperties.class,
30+
GrayClientProperties.class,
2831
GrayServerProperties.class,
2932
GrayRequestProperties.class,
3033
GrayLoadProperties.class,
@@ -38,6 +41,8 @@ public class GrayClientAutoConfiguration {
3841

3942
@Autowired
4043
private GrayClientProperties grayClientProperties;
44+
@Autowired
45+
private GrayProperties grayProperties;
4146

4247

4348
@Bean
@@ -63,6 +68,12 @@ public GrayManager grayManager(
6368
}
6469

6570

71+
@Bean
72+
@ConditionalOnMissingBean
73+
public GraySwitcher graySwitcher() {
74+
return new EnbGraySwitcher(grayProperties);
75+
}
76+
6677
@Bean
6778
@ConditionalOnProperty(value = "gray.client.instance.grayEnroll")
6879
public GrayClientEnrollInitializingDestroyBean grayClientEnrollInitializingDestroyBean(
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package cn.springcloud.gray.client.config.properties;
2+
3+
import org.springframework.boot.context.properties.ConfigurationProperties;
4+
5+
@ConfigurationProperties("gray")
6+
public class GrayProperties {
7+
8+
private boolean enabled;
9+
10+
11+
public boolean isEnabled() {
12+
return enabled;
13+
}
14+
15+
public void setEnabled(boolean enabled) {
16+
this.enabled = enabled;
17+
}
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package cn.springcloud.gray.client.switcher;
2+
3+
import cn.springcloud.gray.client.config.properties.GrayProperties;
4+
5+
public class EnbGraySwitcher implements GraySwitcher {
6+
7+
private GrayProperties grayProperties;
8+
9+
public EnbGraySwitcher(GrayProperties grayProperties) {
10+
this.grayProperties = grayProperties;
11+
}
12+
13+
@Override
14+
public boolean judge() {
15+
return grayProperties.isEnabled();
16+
}
17+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package cn.springcloud.gray.client.switcher;
2+
3+
public interface GraySwitcher {
4+
5+
boolean judge();
6+
7+
8+
public static class DefaultGraySwitcher implements GraySwitcher {
9+
10+
@Override
11+
public boolean judge() {
12+
return true;
13+
}
14+
}
15+
}

0 commit comments

Comments
 (0)