Skip to content

Commit f529f2c

Browse files
authored
Merge pull request #12 from SpringCloud/2.0
2.0
2 parents 7579b72 + f1cd0b3 commit f529f2c

File tree

87 files changed

+1252
-284
lines changed

Some content is hidden

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

87 files changed

+1252
-284
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<groupId>cn.springcloud.gray</groupId>
1313
<artifactId>spring-cloud-gray</artifactId>
1414
<packaging>pom</packaging>
15-
<version>2.0.0</version>
15+
<version>2.1.0</version>
1616
<url>https://github.com/SpringCloud/spring-cloud-gray</url>
1717
<organization>
1818
<name>Spring Cloud中国社区</name>

spring-cloud-gray-client-netflix/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>spring-cloud-gray</artifactId>
77
<groupId>cn.springcloud.gray</groupId>
8-
<version>2.0.0</version>
8+
<version>2.1.0</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/HystrixGrayAutoConfiguration.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
import cn.springcloud.gray.GrayManager;
44
import cn.springcloud.gray.client.netflix.hystrix.HystrixRequestLocalStorage;
5-
import cn.springcloud.gray.request.GrayHttpTrackInfo;
6-
import cn.springcloud.gray.request.GrayInfoTracker;
75
import cn.springcloud.gray.request.RequestLocalStorage;
6+
import cn.springcloud.gray.request.track.GrayTrackHolder;
87
import cn.springcloud.gray.web.GrayTrackFilter;
98
import com.netflix.hystrix.HystrixCommand;
109
import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext;
@@ -18,9 +17,7 @@
1817
import javax.servlet.ServletException;
1918
import javax.servlet.ServletRequest;
2019
import javax.servlet.ServletResponse;
21-
import javax.servlet.http.HttpServletRequest;
2220
import java.io.IOException;
23-
import java.util.List;
2421

2522
@Configuration
2623
@ConditionalOnClass({HystrixCommand.class, HystrixFeign.class})
@@ -39,9 +36,9 @@ public RequestLocalStorage requestLocalStorage() {
3936

4037
@Bean
4138
public GrayTrackFilter grayTrackFilter(
42-
RequestLocalStorage requestLocalStorage,
43-
List<GrayInfoTracker<GrayHttpTrackInfo, HttpServletRequest>> trackors) {
44-
return new GrayTrackFilter(requestLocalStorage, trackors) {
39+
GrayTrackHolder grayTrackHolder,
40+
RequestLocalStorage requestLocalStorage) {
41+
return new GrayTrackFilter(grayTrackHolder, requestLocalStorage) {
4542
@Override
4643
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
4744
if (!HystrixRequestContext.isCurrentThreadInitialized()) {

spring-cloud-gray-client/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>spring-cloud-gray</artifactId>
77
<groupId>cn.springcloud.gray</groupId>
8-
<version>2.0.0</version>
8+
<version>2.1.0</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

@@ -56,7 +56,7 @@
5656
<dependency>
5757
<groupId>cn.springcloud.gray</groupId>
5858
<artifactId>spring-cloud-gray-utils</artifactId>
59-
<version>2.0.0</version>
59+
<version>2.1.0</version>
6060
<scope>compile</scope>
6161
</dependency>
6262
<dependency>

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

Lines changed: 4 additions & 10 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.HttpInformationClient;
43
import cn.springcloud.gray.communication.InformationClient;
5-
import cn.springcloud.gray.communication.RetryableInformationClient;
64
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
75

86
import java.util.List;
@@ -12,9 +10,12 @@ public abstract class AbstractCommunicableGrayManager extends SimpleGrayManager
1210
private GrayClientConfig grayClientConfig;
1311
private InformationClient informationClient;
1412

15-
public AbstractCommunicableGrayManager(GrayClientConfig grayClientConfig, GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, List<RequestInterceptor> requestInterceptors) {
13+
public AbstractCommunicableGrayManager(
14+
GrayClientConfig grayClientConfig, GrayDecisionFactoryKeeper grayDecisionFactoryKeeper,
15+
List<RequestInterceptor> requestInterceptors, InformationClient informationClient) {
1616
super(grayDecisionFactoryKeeper, requestInterceptors);
1717
this.grayClientConfig = grayClientConfig;
18+
this.informationClient = informationClient;
1819
createInformationClient();
1920
}
2021

@@ -29,13 +30,6 @@ public InformationClient getGrayInformationClient() {
2930

3031
protected void createInformationClient() {
3132

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-
}
3933

4034
}
4135

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

3-
import cn.springcloud.gray.communication.InformationClient;
43

5-
public interface CommunicableGrayManager extends GrayManager {
4+
public interface CommunicableGrayManager extends GrayManager, GrayServerCommunicable {
65

7-
InformationClient getGrayInformationClient();
86

97
}
Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.springcloud.gray;
22

3-
3+
import cn.springcloud.gray.client.config.properties.GrayLoadProperties;
4+
import cn.springcloud.gray.communication.InformationClient;
45
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
56
import cn.springcloud.gray.model.GrayInstance;
67
import cn.springcloud.gray.model.GrayService;
@@ -16,46 +17,80 @@
1617
public class DefaultGrayManager extends AbstractCommunicableGrayManager {
1718

1819
private Timer updateTimer = new Timer("Gray-Update-Timer", true);
19-
20-
public DefaultGrayManager(GrayClientConfig grayClientConfig, GrayDecisionFactoryKeeper grayDecisionFactoryKeeper,
21-
List<RequestInterceptor> requestInterceptors) {
22-
super(grayClientConfig, grayDecisionFactoryKeeper, requestInterceptors);
20+
private GrayLoadProperties grayLoadProperties;
21+
22+
public DefaultGrayManager(
23+
GrayClientConfig grayClientConfig,
24+
GrayLoadProperties grayLoadProperties,
25+
GrayDecisionFactoryKeeper grayDecisionFactoryKeeper,
26+
List<RequestInterceptor> requestInterceptors,
27+
InformationClient informationClient) {
28+
super(grayClientConfig, grayDecisionFactoryKeeper, requestInterceptors, informationClient);
29+
this.grayLoadProperties = grayLoadProperties;
2330
openForWork();
2431
}
2532

26-
2733
public void openForWork() {
2834
log.info("拉取灰度列表");
29-
doUpdate();
30-
updateTimer.schedule(new UpdateTask(),
31-
getGrayClientConfig().getServiceUpdateIntervalTimerInMs(),
32-
getGrayClientConfig().getServiceUpdateIntervalTimerInMs());
33-
}
35+
if (getGrayInformationClient() != null) {
36+
doUpdate();
37+
int timerMs = getGrayClientConfig().getServiceUpdateIntervalTimerInMs();
38+
if (timerMs > 0) {
39+
updateTimer.schedule(new UpdateTask(), timerMs, timerMs);
40+
}
41+
} else {
42+
loadPropertiesGrays();
43+
}
3444

45+
}
3546

3647
private void doUpdate() {
3748
try {
3849
log.debug("更新灰度服务列表...");
39-
4050
List<GrayInstance> grayInstances = getGrayInformationClient().allGrayInstances();
4151
Map<String, GrayService> grayServices = new ConcurrentHashMap<>();
42-
grayInstances.forEach(instance -> {
43-
updateGrayInstance(grayServices, instance);
44-
});
52+
grayInstances.forEach(
53+
instance -> {
54+
updateGrayInstance(grayServices, instance);
55+
});
56+
joinLoadedGrays(grayServices);
4557
this.grayServices = grayServices;
4658
} catch (Exception e) {
4759
log.error("更新灰度服务列表失败", e);
4860
}
4961
}
5062

5163

64+
private void loadPropertiesGrays() {
65+
Map<String, GrayService> grayServices = new ConcurrentHashMap<>();
66+
joinLoadedGrays(grayServices);
67+
this.grayServices = grayServices;
68+
}
69+
70+
71+
/**
72+
* 加入配置文件中的灰度实例,但不会覆盖列表中的信息
73+
*
74+
* @param grayServices 更新的灰度列表
75+
*/
76+
private void joinLoadedGrays(Map<String, GrayService> grayServices) {
77+
if (grayLoadProperties != null && grayLoadProperties.isEnabled()) {
78+
grayLoadProperties.getGrayInstances().forEach(
79+
instance -> {
80+
if (grayServices.containsKey(instance.getServiceId())
81+
|| grayServices.get(instance.getServiceId())
82+
.getGrayInstance(instance.getInstanceId()) != null) {
83+
updateGrayInstance(grayServices, instance);
84+
}
85+
});
86+
}
87+
}
88+
5289
class UpdateTask extends TimerTask {
5390

5491
@Override
5592
public void run() {
5693
doUpdate();
5794
}
5895
}
59-
60-
6196
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public interface GrayClientConfig {
3434

3535

3636
/**
37-
* 更新灰度列表的时间间隔(ms)
37+
* 更新灰度列表的时间间隔(ms),小于等于0将不会开启定时轮询
3838
*
3939
* @return 返回更新灰度列表的时间间隔(ms)
4040
*/
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package cn.springcloud.gray;
2+
3+
import cn.springcloud.gray.communication.InformationClient;
4+
5+
public interface GrayServerCommunicable {
6+
7+
InformationClient getGrayInformationClient();
8+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package cn.springcloud.gray;
2+
3+
public interface InstanceLocalInfoAware {
4+
5+
void setInstanceLocalInfo(InstanceLocalInfo instanceLocalInfo);
6+
}

0 commit comments

Comments
 (0)