Skip to content

Commit 13a17eb

Browse files
committed
添加LocalStoreLifeCycle
1 parent 3335a99 commit 13a17eb

19 files changed

+118
-72
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package cn.springcloud.gray.client.netflix.configuration;
22

33
import cn.springcloud.gray.GrayManager;
4+
import cn.springcloud.gray.client.netflix.hystrix.HystrixLocalStorageCycle;
45
import cn.springcloud.gray.client.netflix.hystrix.HystrixRequestLocalStorage;
6+
import cn.springcloud.gray.request.LocalStorageLifeCycle;
57
import cn.springcloud.gray.request.RequestLocalStorage;
68
import com.netflix.hystrix.HystrixCommand;
79
import feign.hystrix.HystrixFeign;
@@ -25,6 +27,11 @@ public RequestLocalStorage requestLocalStorage() {
2527
return new HystrixRequestLocalStorage();
2628
}
2729

30+
@Bean
31+
public LocalStorageLifeCycle localStorageLifeCycle() {
32+
return new HystrixLocalStorageCycle();
33+
}
34+
2835

2936
/**
3037
* 支持hystrix使用线程隔离时依然能够进行跑线程传递GrayRequest

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import cn.springcloud.gray.client.netflix.connectionpoint.DefaultRibbonConnectionPoint;
55
import cn.springcloud.gray.client.netflix.connectionpoint.RibbonConnectionPoint;
66
import cn.springcloud.gray.client.netflix.ribbon.configuration.GrayRibbonClientsConfiguration;
7+
import cn.springcloud.gray.request.LocalStorageLifeCycle;
78
import cn.springcloud.gray.request.RequestLocalStorage;
89
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
910
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -20,8 +21,8 @@ public class NetflixRibbonGrayAutoConfiguration {
2021
@Bean
2122
@ConditionalOnMissingBean
2223
public RibbonConnectionPoint ribbonConnectionPoint(
23-
GrayManager grayManager, RequestLocalStorage requestLocalStorage) {
24-
return new DefaultRibbonConnectionPoint(grayManager, requestLocalStorage);
24+
GrayManager grayManager, RequestLocalStorage requestLocalStorage, LocalStorageLifeCycle localStorageLifeCycle) {
25+
return new DefaultRibbonConnectionPoint(grayManager, requestLocalStorage, localStorageLifeCycle);
2526
}
2627

2728
}

spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/connectionpoint/DefaultHystrixRibbonConnectionPoint.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package cn.springcloud.gray.client.netflix.connectionpoint;
22

33
import cn.springcloud.gray.GrayManager;
4+
import cn.springcloud.gray.request.LocalStorageLifeCycle;
45
import cn.springcloud.gray.request.RequestLocalStorage;
56

67
@Deprecated
78
public class DefaultHystrixRibbonConnectionPoint extends DefaultRibbonConnectionPoint {
89

910
private ThreadLocal<Boolean> hystrixRequestContextInitialized = new ThreadLocal<>();
1011

11-
public DefaultHystrixRibbonConnectionPoint(GrayManager grayManager, RequestLocalStorage requestLocalStorage) {
12-
super(grayManager, requestLocalStorage);
12+
public DefaultHystrixRibbonConnectionPoint(
13+
GrayManager grayManager,
14+
RequestLocalStorage requestLocalStorage,
15+
LocalStorageLifeCycle localStorageLifeCycle) {
16+
super(grayManager, requestLocalStorage, localStorageLifeCycle);
1317
}
1418

1519

spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/connectionpoint/DefaultRibbonConnectionPoint.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import cn.springcloud.gray.RequestInterceptor;
55
import cn.springcloud.gray.request.GrayRequest;
66
import cn.springcloud.gray.request.GrayTrackInfo;
7+
import cn.springcloud.gray.request.LocalStorageLifeCycle;
78
import cn.springcloud.gray.request.RequestLocalStorage;
89

910
import java.util.List;
@@ -12,16 +13,21 @@ public class DefaultRibbonConnectionPoint implements RibbonConnectionPoint {
1213

1314
private GrayManager grayManager;
1415
private RequestLocalStorage requestLocalStorage;
16+
private LocalStorageLifeCycle localStorageLifeCycle;
1517

16-
public DefaultRibbonConnectionPoint(GrayManager grayManager, RequestLocalStorage requestLocalStorage) {
18+
public DefaultRibbonConnectionPoint(
19+
GrayManager grayManager,
20+
RequestLocalStorage requestLocalStorage,
21+
LocalStorageLifeCycle localStorageLifeCycle) {
1722
this.grayManager = grayManager;
1823
this.requestLocalStorage = requestLocalStorage;
24+
this.localStorageLifeCycle = localStorageLifeCycle;
1925
}
2026

2127
@Override
2228
public void executeConnectPoint(ConnectPointContext connectPointContext) {
2329

24-
requestLocalStorage.initContext();
30+
localStorageLifeCycle.initContext();
2531

2632
ConnectPointContext.setContextLocal(connectPointContext);
2733
GrayRequest grayRequest = connectPointContext.getGrayRequest();
@@ -58,7 +64,7 @@ public void shutdownconnectPoint(ConnectPointContext connectPointContext) {
5864
ConnectPointContext.removeContextLocal();
5965
requestLocalStorage.removeGrayRequest();
6066
} finally {
61-
requestLocalStorage.closeContext();
67+
localStorageLifeCycle.closeContext();
6268
}
6369
}
6470

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package cn.springcloud.gray.client.netflix.hystrix;
2+
3+
import cn.springcloud.gray.request.LocalStorageLifeCycle;
4+
import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext;
5+
6+
public class HystrixLocalStorageCycle implements LocalStorageLifeCycle {
7+
8+
9+
private ThreadLocal<Boolean> hystrixRequestContextInitialized = new ThreadLocal<>();
10+
11+
12+
@Override
13+
public void initContext() {
14+
if (!HystrixRequestContext.isCurrentThreadInitialized()) {
15+
HystrixRequestContext.initializeContext();
16+
hystrixRequestContextInitialized.set(true);
17+
}
18+
}
19+
20+
@Override
21+
public void closeContext() {
22+
Boolean hystrixReqCxtInited = hystrixRequestContextInitialized.get();
23+
if (hystrixReqCxtInited != null && hystrixReqCxtInited && HystrixRequestContext.isCurrentThreadInitialized()) {
24+
HystrixRequestContext.getContextForCurrentThread().shutdown();
25+
}
26+
}
27+
}

spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/hystrix/HystrixRequestLocalStorage.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,15 @@
33
import cn.springcloud.gray.request.GrayRequest;
44
import cn.springcloud.gray.request.GrayTrackInfo;
55
import cn.springcloud.gray.request.RequestLocalStorage;
6-
import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext;
76
import com.netflix.hystrix.strategy.concurrency.HystrixRequestVariableDefault;
87

98
public class HystrixRequestLocalStorage implements RequestLocalStorage {
109

1110

12-
private ThreadLocal<Boolean> hystrixRequestContextInitialized = new ThreadLocal<>();
1311
private static final HystrixRequestVariableDefault<GrayTrackInfo> grayTrackInfoLocal = new HystrixRequestVariableDefault<GrayTrackInfo>();
1412
private static final HystrixRequestVariableDefault<GrayRequest> rrayRequestLocal = new HystrixRequestVariableDefault<GrayRequest>();
1513

1614

17-
@Override
18-
public void initContext() {
19-
if (!HystrixRequestContext.isCurrentThreadInitialized()) {
20-
HystrixRequestContext.initializeContext();
21-
hystrixRequestContextInitialized.set(true);
22-
}
23-
}
24-
2515
@Override
2616
public void setGrayTrackInfo(GrayTrackInfo grayTrackInfo) {
2717
grayTrackInfoLocal.set(grayTrackInfo);
@@ -52,11 +42,4 @@ public GrayRequest getGrayRequest() {
5242
return rrayRequestLocal.get();
5343
}
5444

55-
@Override
56-
public void closeContext() {
57-
Boolean hystrixReqCxtInited = hystrixRequestContextInitialized.get();
58-
if (hystrixReqCxtInited != null && hystrixReqCxtInited && HystrixRequestContext.isCurrentThreadInitialized()) {
59-
HystrixRequestContext.getContextForCurrentThread().shutdown();
60-
}
61-
}
6245
}

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.request.LocalStorageLifeCycle;
34
import cn.springcloud.gray.request.RequestLocalStorage;
45
import cn.springcloud.gray.servernode.ServerExplainer;
56
import cn.springcloud.gray.servernode.ServerListProcessor;
@@ -8,6 +9,7 @@ public class GrayClientHolder {
89

910
private static GrayManager grayManager;
1011
private static RequestLocalStorage requestLocalStorage;
12+
private static LocalStorageLifeCycle localStorageLifeCycle;
1113
private static ServerExplainer<?> serverExplainer;
1214
private static ServerListProcessor<?> serverListProcessor;
1315

@@ -27,6 +29,14 @@ public static void setRequestLocalStorage(RequestLocalStorage requestLocalStorag
2729
GrayClientHolder.requestLocalStorage = requestLocalStorage;
2830
}
2931

32+
public static void setLocalStorageLifeCycle(LocalStorageLifeCycle localStorageLifeCycle) {
33+
GrayClientHolder.localStorageLifeCycle = localStorageLifeCycle;
34+
}
35+
36+
public static LocalStorageLifeCycle getLocalStorageLifeCycle() {
37+
return localStorageLifeCycle;
38+
}
39+
3040
public static <SERVER> ServerExplainer<SERVER> getServerExplainer() {
3141
return (ServerExplainer<SERVER>) serverExplainer;
3242
}

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

Lines changed: 2 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.request.LocalStorageLifeCycle;
34
import cn.springcloud.gray.request.RequestLocalStorage;
45
import cn.springcloud.gray.servernode.ServerExplainer;
56
import cn.springcloud.gray.servernode.ServerListProcessor;
@@ -19,6 +20,7 @@ public class GrayClientInitializer implements ApplicationContextAware, Initializ
1920
public void afterPropertiesSet() throws Exception {
2021
GrayClientHolder.setGrayManager(getBean("grayManager", GrayManager.class));
2122
GrayClientHolder.setRequestLocalStorage(getBean("requestLocalStorage", RequestLocalStorage.class));
23+
GrayClientHolder.setLocalStorageLifeCycle(getBean("localStorageLifeCycle", LocalStorageLifeCycle.class));
2224
GrayClientHolder.setServerExplainer(getBean("serverExplainer", ServerExplainer.class));
2325
GrayClientHolder.setServerListProcessor(
2426
getBean("serverListProcessor", ServerListProcessor.class, new ServerListProcessor.Default()));

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import cn.springcloud.gray.communication.InformationClient;
88
import cn.springcloud.gray.decision.GrayDecision;
99
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
10+
import cn.springcloud.gray.request.LocalStorageLifeCycle;
1011
import cn.springcloud.gray.request.RequestLocalStorage;
1112
import cn.springcloud.gray.request.ThreadLocalRequestStorage;
1213
import com.github.benmanes.caffeine.cache.Caffeine;
@@ -76,6 +77,11 @@ public RequestLocalStorage requestLocalStorage() {
7677
return new ThreadLocalRequestStorage();
7778
}
7879

80+
@Bean
81+
@ConditionalOnMissingBean
82+
public LocalStorageLifeCycle localStorageLifeCycle() {
83+
return new LocalStorageLifeCycle.NoOpLocalStorageLifeCycle();
84+
}
7985

8086
@Bean
8187
public GrayClientInitializer grayClientInitializer() {

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

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

33
import cn.springcloud.gray.request.GrayTrackInfo;
4+
import cn.springcloud.gray.request.LocalStorageLifeCycle;
45
import cn.springcloud.gray.request.RequestLocalStorage;
56
import lombok.Data;
67

78
@Data
89
public abstract class GrayAsyncContext {
910

1011
protected RequestLocalStorage requestLocalStorage;
12+
protected LocalStorageLifeCycle localStorageLifeCycle;
1113

1214
protected GrayTrackInfo grayTrackInfo;
1315

0 commit comments

Comments
 (0)