Skip to content

Commit 5accfe3

Browse files
committed
添加graydecision缓存
1 parent 9b79714 commit 5accfe3

File tree

7 files changed

+206
-87
lines changed

7 files changed

+206
-87
lines changed

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

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 2 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,21 @@
11
package cn.springcloud.gray;
22

3-
import cn.springcloud.gray.communication.InformationClient;
43
import cn.springcloud.gray.decision.GrayDecision;
54
import cn.springcloud.gray.model.GrayInstance;
6-
import cn.springcloud.gray.model.GrayService;
75

8-
import java.util.Collection;
96
import java.util.List;
107
import java.util.function.Supplier;
118

12-
public class CachedDelegateGrayManager implements CacheableGrayManager, CommunicableGrayManager {
9+
public class CachedDelegateGrayManager extends GrayManagerDelegater implements CacheableGrayManager, CommunicableGrayManager {
1310

14-
private GrayManager delegate;
1511
private Cache<String, List<GrayDecision>> grayDecisionCache;
1612

1713

1814
public CachedDelegateGrayManager(GrayManager delegate, Cache<String, List<GrayDecision>> grayDecisionCache) {
19-
this.delegate = delegate;
15+
super(delegate);
2016
this.grayDecisionCache = grayDecisionCache;
2117
}
2218

23-
@Override
24-
public boolean hasGray(String serviceId) {
25-
return delegate.hasGray(serviceId);
26-
}
27-
28-
@Override
29-
public Collection<GrayService> allGrayServices() {
30-
return delegate.allGrayServices();
31-
}
32-
33-
@Override
34-
public GrayService getGrayService(String serviceId) {
35-
return delegate.getGrayService(serviceId);
36-
}
37-
38-
@Override
39-
public GrayInstance getGrayInstance(String serviceId, String instanceId) {
40-
return delegate.getGrayInstance(serviceId, instanceId);
41-
}
4219

4320
@Override
4421
public List<GrayDecision> getGrayDecision(GrayInstance instance) {
@@ -75,20 +52,6 @@ public void closeGray(String serviceId, String instanceId) {
7552
invalidateCache(serviceId, instanceId);
7653
}
7754

78-
@Override
79-
public List<RequestInterceptor> getRequeestInterceptors(String interceptroType) {
80-
return delegate.getRequeestInterceptors(interceptroType);
81-
}
82-
83-
@Override
84-
public void setup() {
85-
delegate.setup();
86-
}
87-
88-
@Override
89-
public void shutdown() {
90-
delegate.shutdown();
91-
}
9255

9356
@Override
9457
public void setGrayServices(Object grayServices) {
@@ -98,12 +61,6 @@ public void setGrayServices(Object grayServices) {
9861
}
9962
}
10063

101-
@Override
102-
public void setRequestInterceptors(Collection<RequestInterceptor> requestInterceptors) {
103-
if (delegate instanceof UpdateableGrayManager) {
104-
((UpdateableGrayManager) delegate).setRequestInterceptors(requestInterceptors);
105-
}
106-
}
10764

10865
private List<GrayDecision> getCacheGrayDecision(String key, Supplier<List<GrayDecision>> supplier) {
10966
return grayDecisionCache.get(key, k -> supplier.get());
@@ -113,11 +70,4 @@ private void invalidateCache(String serviceId, String instanceId) {
11370
grayDecisionCache.invalidate(instanceId);
11471
}
11572

116-
@Override
117-
public InformationClient getGrayInformationClient() {
118-
if (delegate instanceof CommunicableGrayManager) {
119-
return ((CommunicableGrayManager) delegate).getGrayInformationClient();
120-
}
121-
throw new UnsupportedOperationException("delegate不是CommunicableGrayManager的实现类");
122-
}
12373
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package cn.springcloud.gray;
2+
3+
import cn.springcloud.gray.decision.GrayDecision;
4+
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
5+
import cn.springcloud.gray.model.GrayInstance;
6+
7+
import java.util.List;
8+
import java.util.function.Supplier;
9+
10+
public class CachedGrayManager extends SimpleGrayManager implements CacheableGrayManager {
11+
12+
protected Cache<String, List<GrayDecision>> grayDecisionCache;
13+
14+
15+
public CachedGrayManager(
16+
GrayDecisionFactoryKeeper grayDecisionFactoryKeeper,
17+
Cache<String, List<GrayDecision>> grayDecisionCache) {
18+
super(grayDecisionFactoryKeeper);
19+
this.grayDecisionCache = grayDecisionCache;
20+
}
21+
22+
23+
@Override
24+
public List<GrayDecision> getGrayDecision(GrayInstance instance) {
25+
return getCacheGrayDecision(instance.getInstanceId(), () -> super.getGrayDecision(instance));
26+
}
27+
28+
@Override
29+
public List<GrayDecision> getGrayDecision(String serviceId, String instanceId) {
30+
return getCacheGrayDecision(instanceId, () -> super.getGrayDecision(getGrayInstance(serviceId, instanceId)));
31+
}
32+
33+
34+
@Override
35+
public Cache<String, List<GrayDecision>> getGrayDecisionCache() {
36+
return grayDecisionCache;
37+
}
38+
39+
40+
@Override
41+
public void updateGrayInstance(GrayInstance instance) {
42+
super.updateGrayInstance(instance);
43+
invalidateCache(instance.getServiceId(), instance.getInstanceId());
44+
}
45+
46+
@Override
47+
public void closeGray(GrayInstance instance) {
48+
super.closeGray(instance);
49+
invalidateCache(instance.getServiceId(), instance.getInstanceId());
50+
}
51+
52+
@Override
53+
public void closeGray(String serviceId, String instanceId) {
54+
super.closeGray(serviceId, instanceId);
55+
invalidateCache(serviceId, instanceId);
56+
}
57+
58+
59+
@Override
60+
public void setGrayServices(Object grayServices) {
61+
super.setGrayServices(grayServices);
62+
grayDecisionCache.invalidateAll();
63+
}
64+
65+
66+
private List<GrayDecision> getCacheGrayDecision(String key, Supplier<List<GrayDecision>> supplier) {
67+
return grayDecisionCache.get(key, k -> supplier.get());
68+
}
69+
70+
private void invalidateCache(String serviceId, String instanceId) {
71+
grayDecisionCache.invalidate(instanceId);
72+
}
73+
}

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import cn.springcloud.gray.client.config.properties.GrayLoadProperties;
44
import cn.springcloud.gray.communication.InformationClient;
5+
import cn.springcloud.gray.decision.GrayDecision;
56
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
67
import cn.springcloud.gray.model.GrayInstance;
78
import cn.springcloud.gray.model.GrayService;
@@ -15,18 +16,23 @@
1516
import java.util.concurrent.ConcurrentHashMap;
1617

1718
@Slf4j
18-
public class DefaultGrayManager extends AbstractCommunicableGrayManager {
19+
public class DefaultGrayManager extends CachedGrayManager implements CommunicableGrayManager {
1920

2021
private Timer updateTimer = new Timer("Gray-Update-Timer", true);
2122
private GrayLoadProperties grayLoadProperties;
23+
private GrayClientConfig grayClientConfig;
24+
private InformationClient informationClient;
2225

2326
public DefaultGrayManager(
2427
GrayClientConfig grayClientConfig,
2528
GrayLoadProperties grayLoadProperties,
2629
GrayDecisionFactoryKeeper grayDecisionFactoryKeeper,
27-
InformationClient informationClient) {
28-
super(grayClientConfig, grayDecisionFactoryKeeper, informationClient);
30+
InformationClient informationClient,
31+
Cache<String, List<GrayDecision>> grayDecisionCache) {
32+
super(grayDecisionFactoryKeeper, grayDecisionCache);
2933
this.grayLoadProperties = grayLoadProperties;
34+
this.grayClientConfig = grayClientConfig;
35+
this.informationClient = informationClient;
3036
}
3137

3238
@Override
@@ -115,4 +121,13 @@ public void run() {
115121
doUpdate();
116122
}
117123
}
124+
125+
public GrayClientConfig getGrayClientConfig() {
126+
return grayClientConfig;
127+
}
128+
129+
@Override
130+
public InformationClient getGrayInformationClient() {
131+
return informationClient;
132+
}
118133
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package cn.springcloud.gray;
2+
3+
import cn.springcloud.gray.communication.InformationClient;
4+
import cn.springcloud.gray.decision.GrayDecision;
5+
import cn.springcloud.gray.model.GrayInstance;
6+
import cn.springcloud.gray.model.GrayService;
7+
8+
import java.util.Collection;
9+
import java.util.List;
10+
11+
public abstract class GrayManagerDelegater implements UpdateableGrayManager, CommunicableGrayManager {
12+
13+
protected GrayManager delegate;
14+
15+
public GrayManagerDelegater(GrayManager delegate) {
16+
this.delegate = delegate;
17+
}
18+
19+
@Override
20+
public boolean hasGray(String serviceId) {
21+
return delegate.hasGray(serviceId);
22+
}
23+
24+
@Override
25+
public Collection<GrayService> allGrayServices() {
26+
return delegate.allGrayServices();
27+
}
28+
29+
@Override
30+
public GrayService getGrayService(String serviceId) {
31+
return delegate.getGrayService(serviceId);
32+
}
33+
34+
@Override
35+
public GrayInstance getGrayInstance(String serviceId, String instanceId) {
36+
return delegate.getGrayInstance(serviceId, instanceId);
37+
}
38+
39+
@Override
40+
public List<GrayDecision> getGrayDecision(GrayInstance instance) {
41+
return delegate.getGrayDecision(instance);
42+
}
43+
44+
@Override
45+
public List<GrayDecision> getGrayDecision(String serviceId, String instanceId) {
46+
return delegate.getGrayDecision(serviceId, instanceId);
47+
}
48+
49+
50+
@Override
51+
public void updateGrayInstance(GrayInstance instance) {
52+
delegate.updateGrayInstance(instance);
53+
}
54+
55+
@Override
56+
public void closeGray(GrayInstance instance) {
57+
delegate.closeGray(instance);
58+
}
59+
60+
@Override
61+
public void closeGray(String serviceId, String instanceId) {
62+
delegate.closeGray(serviceId, instanceId);
63+
}
64+
65+
@Override
66+
public List<RequestInterceptor> getRequeestInterceptors(String interceptroType) {
67+
return delegate.getRequeestInterceptors(interceptroType);
68+
}
69+
70+
@Override
71+
public void setup() {
72+
delegate.setup();
73+
}
74+
75+
@Override
76+
public void shutdown() {
77+
delegate.shutdown();
78+
}
79+
80+
@Override
81+
public void setGrayServices(Object grayServices) {
82+
if (delegate instanceof UpdateableGrayManager) {
83+
((UpdateableGrayManager) delegate).setGrayServices(grayServices);
84+
}
85+
}
86+
87+
@Override
88+
public void setRequestInterceptors(Collection<RequestInterceptor> requestInterceptors) {
89+
if (delegate instanceof UpdateableGrayManager) {
90+
((UpdateableGrayManager) delegate).setRequestInterceptors(requestInterceptors);
91+
}
92+
}
93+
94+
@Override
95+
public InformationClient getGrayInformationClient() {
96+
if (delegate instanceof CommunicableGrayManager) {
97+
return ((CommunicableGrayManager) delegate).getGrayInformationClient();
98+
}
99+
throw new UnsupportedOperationException("delegate不是CommunicableGrayManager的实现类");
100+
}
101+
102+
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,11 @@ public GrayManager grayManager(
5353
.build();
5454

5555
DefaultGrayManager grayManager = new DefaultGrayManager(
56-
grayClientProperties, grayLoadProperties, grayDecisionFactoryKeeper, informationClient);
56+
grayClientProperties, grayLoadProperties, grayDecisionFactoryKeeper, informationClient,
57+
new CaffeineCache<>(cache));
58+
return grayManager;
5759

58-
return new CachedDelegateGrayManager(grayManager, new CaffeineCache<>(cache));
60+
// return new CachedDelegateGrayManager(grayManager, new CaffeineCache<>(cache));
5961
}
6062

6163

spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/jpa/JPAGrayServerModule.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ public void saveGrayInstance(GrayInstance instance) {
113113

114114
}
115115
grayInstanceService.saveModel(instance);
116+
if (grayServerProperties.getInstance().getNormalInstanceStatus().contains(instance.getInstanceStatus())) {
117+
if (Objects.equals(instance.getGrayStatus(), GrayStatus.OPEN)) {
118+
publishUpdateIntanceEvent(instance);
119+
} else {
120+
publishDownIntanceEvent(instance);
121+
}
122+
}
116123
}
117124

118125
@Override

0 commit comments

Comments
 (0)