Skip to content

Commit c49451f

Browse files
committed
加入spring cloud stream实现gray-server改动后主动推送到gray-client.
1 parent 2016b73 commit c49451f

File tree

47 files changed

+647
-72
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+647
-72
lines changed

spring-cloud-gray-client/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@
6565
<optional>true</optional>
6666
</dependency>
6767

68+
<dependency>
69+
<groupId>org.springframework.cloud</groupId>
70+
<artifactId>spring-cloud-stream</artifactId>
71+
</dependency>
72+
6873
</dependencies>
6974

7075

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package cn.springcloud.gray;
2+
3+
import cn.springcloud.gray.communication.HttpInformationClient;
4+
import cn.springcloud.gray.communication.InformationClient;
5+
import cn.springcloud.gray.communication.RetryableInformationClient;
6+
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
7+
8+
import java.util.List;
9+
10+
public abstract class AbstractCommunicableGrayManager extends SimpleGrayManager implements CommunicableGrayManager {
11+
12+
private GrayClientConfig grayClientConfig;
13+
private InformationClient informationClient;
14+
15+
public AbstractCommunicableGrayManager(GrayClientConfig grayClientConfig, GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, List<RequestInterceptor> requestInterceptors) {
16+
super(grayDecisionFactoryKeeper, requestInterceptors);
17+
this.grayClientConfig = grayClientConfig;
18+
createInformationClient();
19+
}
20+
21+
public GrayClientConfig getGrayClientConfig() {
22+
return grayClientConfig;
23+
}
24+
25+
@Override
26+
public InformationClient getGrayInformationClient() {
27+
return informationClient;
28+
}
29+
30+
protected void createInformationClient() {
31+
32+
GrayClientConfig clientConfig = getGrayClientConfig();
33+
InformationClient httpClient = new HttpInformationClient(clientConfig.getServerUrl());
34+
if (clientConfig.isRetryable()) {
35+
informationClient = new RetryableInformationClient(Math.max(3, clientConfig.getRetryNumberOfRetries()), httpClient);
36+
} else {
37+
informationClient = httpClient;
38+
}
39+
40+
}
41+
42+
43+
}
Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,9 @@
11
package cn.springcloud.gray;
22

3-
import cn.springcloud.gray.communication.HttpInformationClient;
43
import cn.springcloud.gray.communication.InformationClient;
5-
import cn.springcloud.gray.communication.RetryableInformationClient;
6-
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
7-
import cn.springcloud.gray.decision.factory.GrayDecisionFactory;
84

9-
import java.util.List;
10-
11-
public abstract class CommunicableGrayManager extends SimpleGrayManager {
12-
13-
private GrayClientConfig grayClientConfig;
14-
private InformationClient informationClient;
15-
16-
public CommunicableGrayManager(GrayClientConfig grayClientConfig, GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, List<RequestInterceptor> requestInterceptors) {
17-
super(grayDecisionFactoryKeeper, requestInterceptors);
18-
this.grayClientConfig = grayClientConfig;
19-
createInformationClient();
20-
}
21-
22-
public GrayClientConfig getGrayClientConfig() {
23-
return grayClientConfig;
24-
}
25-
26-
public InformationClient getGrayInformationClient() {
27-
return informationClient;
28-
}
29-
30-
protected void createInformationClient() {
31-
32-
GrayClientConfig clientConfig = getGrayClientConfig();
33-
InformationClient httpClient = new HttpInformationClient(clientConfig.getServerUrl());
34-
if (clientConfig.isRetryable()) {
35-
informationClient = new RetryableInformationClient(Math.max(3, clientConfig.getRetryNumberOfRetries()), httpClient);
36-
} else {
37-
informationClient = httpClient;
38-
}
39-
40-
}
5+
public interface CommunicableGrayManager extends GrayManager {
416

7+
InformationClient getGrayInformationClient();
428

439
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33

44
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
5-
import cn.springcloud.gray.decision.factory.GrayDecisionFactory;
65
import cn.springcloud.gray.model.GrayInstance;
76
import cn.springcloud.gray.model.GrayService;
87
import lombok.extern.slf4j.Slf4j;
@@ -14,7 +13,7 @@
1413
import java.util.concurrent.ConcurrentHashMap;
1514

1615
@Slf4j
17-
public class DefaultGrayManager extends CommunicableGrayManager {
16+
public class DefaultGrayManager extends AbstractCommunicableGrayManager {
1817

1918
private Timer updateTimer = new Timer("Gray-Update-Timer", true);
2019

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

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

3-
import cn.springcloud.gray.communication.InformationClient;
43
import cn.springcloud.gray.decision.GrayDecision;
5-
import cn.springcloud.gray.model.GrayService;
64
import cn.springcloud.gray.model.GrayInstance;
5+
import cn.springcloud.gray.model.GrayService;
76

87
import java.util.Collection;
98
import java.util.List;
@@ -39,6 +38,8 @@ public interface GrayManager {
3938

4039
void closeGray(GrayInstance instance);
4140

41+
void closeGray(String serviceId, String instanceId);
42+
4243
List<RequestInterceptor> getRequeestInterceptors(String interceptroType);
4344

4445

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

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

3-
import cn.springcloud.gray.communication.InformationClient;
43
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
5-
import cn.springcloud.gray.decision.factory.GrayDecisionFactory;
64
import cn.springcloud.gray.model.GrayInstance;
75
import cn.springcloud.gray.model.GrayService;
86
import lombok.extern.slf4j.Slf4j;
@@ -65,6 +63,8 @@ protected void updateGrayInstance(Map<String, GrayService> grayServices, GrayIns
6563
grayServices.put(service.getServiceId(), service);
6664
}
6765
}
66+
} else if (grayServices != this.grayServices) {
67+
grayServices.put(service.getServiceId(), service);
6868
}
6969
log.debug("添加灰度实例, serviceId:{}, instanceId:{}", instance.getServiceId(), instance.getInstanceId());
7070
service.setGrayInstance(instance);
@@ -81,6 +81,17 @@ public void closeGray(GrayInstance instance) {
8181
service.removeGrayInstance(instance.getInstanceId());
8282
}
8383

84+
@Override
85+
public void closeGray(String serviceId, String instanceId) {
86+
GrayService service = getGrayService(serviceId);
87+
if (service == null) {
88+
log.debug("没有找到灰度服务:{}, 所以无需删除实例:{} 的灰度状态", serviceId, instanceId);
89+
return;
90+
}
91+
log.debug("关闭实例的在灰度状态, serviceId:{}, instanceId:{}", serviceId, instanceId);
92+
service.removeGrayInstance(instanceId);
93+
}
94+
8495

8596
@Override
8697
public void shutdown() {

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,17 @@ public class GrayClientInitializingDestroyBean implements InitializingBean {
1414

1515
private CommunicableGrayManager grayManager;
1616
private InstanceLocalInfo instanceLocalInfo;
17+
private GrayClientConfig clientConfig;
1718

18-
public GrayClientInitializingDestroyBean(CommunicableGrayManager grayManager, InstanceLocalInfo instanceLocalInfo) {
19+
public GrayClientInitializingDestroyBean(
20+
CommunicableGrayManager grayManager, GrayClientConfig clientConfig, InstanceLocalInfo instanceLocalInfo) {
1921
this.grayManager = grayManager;
22+
this.clientConfig = clientConfig;
2023
this.instanceLocalInfo = instanceLocalInfo;
2124
}
2225

2326
@Override
2427
public void afterPropertiesSet() throws Exception {
25-
GrayClientConfig clientConfig = grayManager.getGrayClientConfig();
2628
if (clientConfig.isGrayEnroll()) {
2729
if (clientConfig.grayEnrollDealyTimeInMs() > 0) {
2830
Thread t = new Thread(() -> {

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import cn.springcloud.gray.client.config.properties.GrayClientProperties;
66
import cn.springcloud.gray.client.config.properties.GrayRequestProperties;
77
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
8-
import cn.springcloud.gray.decision.factory.GrayDecisionFactory;
98
import cn.springcloud.gray.request.RequestLocalStorage;
109
import cn.springcloud.gray.request.ThreadLocalRequestStorage;
1110
import org.springframework.beans.factory.annotation.Autowired;
@@ -41,7 +40,7 @@ public GrayManager grayManager(GrayDecisionFactoryKeeper grayDecisionFactoryKeep
4140
@ConditionalOnBean({CommunicableGrayManager.class, InstanceLocalInfo.class})
4241
public GrayClientInitializingDestroyBean grayClientInitializingDestroyBean(
4342
CommunicableGrayManager grayManager, InstanceLocalInfo instanceLocalInfo) {
44-
return new GrayClientInitializingDestroyBean(grayManager, instanceLocalInfo);
43+
return new GrayClientInitializingDestroyBean(grayManager, grayClientProperties, instanceLocalInfo);
4544
}
4645

4746

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import cn.springcloud.gray.decision.DefaultGrayDecisionFactoryKeeper;
44
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
55
import cn.springcloud.gray.decision.factory.*;
6+
import org.apache.commons.collections.CollectionUtils;
67
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
78
import org.springframework.context.annotation.Bean;
89
import org.springframework.context.annotation.Configuration;
910
import org.springframework.core.convert.ConversionService;
11+
import org.springframework.core.convert.support.DefaultConversionService;
1012
import org.springframework.validation.Validator;
1113

1214
import java.util.List;
@@ -42,8 +44,12 @@ public TraceIpGrayDecisionFactory traceIpGrayDecisionFactory() {
4244
@Bean
4345
@ConditionalOnMissingBean
4446
public GrayDecisionFactoryKeeper grayDecisionFactoryKeeper(
45-
ConversionService conversionService, Validator validator, List<GrayDecisionFactory> decisionFactories) {
46-
return new DefaultGrayDecisionFactoryKeeper(conversionService, validator, decisionFactories);
47+
List<ConversionService> conversionServices, Validator validator, List<GrayDecisionFactory> decisionFactories) {
48+
if (CollectionUtils.isNotEmpty(conversionServices)) {
49+
return new DefaultGrayDecisionFactoryKeeper(conversionServices.get(0), validator, decisionFactories);
50+
}
51+
return new DefaultGrayDecisionFactoryKeeper(DefaultConversionService.getSharedInstance(), validator, decisionFactories);
52+
4753
}
4854

4955

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package cn.springcloud.gray.client.config;
2+
3+
import cn.springcloud.gray.CommunicableGrayManager;
4+
import cn.springcloud.gray.event.DefaultGrayEventListener;
5+
import cn.springcloud.gray.event.GrayEventListener;
6+
import cn.springcloud.gray.event.stream.StreamInput;
7+
import cn.springcloud.gray.event.stream.StreamMessageListener;
8+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
9+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
10+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
11+
import org.springframework.cloud.stream.annotation.EnableBinding;
12+
import org.springframework.context.annotation.Bean;
13+
import org.springframework.context.annotation.Configuration;
14+
15+
@Configuration
16+
public class GrayEventAutoConfiguration {
17+
18+
19+
@Bean
20+
@ConditionalOnMissingBean
21+
public GrayEventListener grayEventListener(CommunicableGrayManager grayManager) {
22+
return new DefaultGrayEventListener(grayManager);
23+
}
24+
25+
26+
@Configuration
27+
@ConditionalOnClass(EnableBinding.class)
28+
@EnableBinding({StreamInput.class})
29+
@ConditionalOnProperty(value = "spring.cloud.stream.bindings.GrayEventInput.destination")
30+
public static class StreamEventConfiguration {
31+
32+
@Bean
33+
public StreamMessageListener streamMessageListener(GrayEventListener grayEventListener) {
34+
return new StreamMessageListener(grayEventListener);
35+
}
36+
37+
}
38+
39+
}

0 commit comments

Comments
 (0)