Skip to content

Commit 96df53d

Browse files
committed
支持reactor nio event loop
1 parent 8801267 commit 96df53d

File tree

3 files changed

+49
-17
lines changed

3 files changed

+49
-17
lines changed

spring-cloud-gray-plugins/spring-cloud-gray-plugin-gateway/src/main/java/cn/springcloud/gray/client/gateway/GrayGlobalFilter.java

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package cn.springcloud.gray.client.gateway;
22

33
import cn.springcloud.gray.client.config.properties.GrayRequestProperties;
4-
import cn.springcloud.gray.client.netflix.constants.GrayNetflixClientConstants;
54
import cn.springcloud.gray.request.GrayHttpRequest;
5+
import cn.springcloud.gray.request.GrayTrackInfo;
6+
import cn.springcloud.gray.request.RequestLocalStorage;
67
import cn.springcloud.gray.routing.connectionpoint.RoutingConnectPointContext;
78
import cn.springcloud.gray.routing.connectionpoint.RoutingConnectionPoint;
8-
import org.apache.commons.io.IOUtils;
9+
import cn.springcloud.gray.web.filter.GrayTrackWebFilter;
910
import org.slf4j.Logger;
1011
import org.slf4j.LoggerFactory;
1112
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
1213
import org.springframework.cloud.gateway.filter.GlobalFilter;
1314
import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
14-
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
1515
import org.springframework.core.Ordered;
1616
import org.springframework.http.HttpHeaders;
1717
import org.springframework.http.server.reactive.ServerHttpRequest;
@@ -34,10 +34,15 @@ public class GrayGlobalFilter implements GlobalFilter, Ordered {
3434

3535
private GrayRequestProperties grayRequestProperties;
3636
private RoutingConnectionPoint routingConnectionPoint;
37+
private RequestLocalStorage requestLocalStorage;
3738

38-
public GrayGlobalFilter(GrayRequestProperties grayRequestProperties, RoutingConnectionPoint routingConnectionPoint) {
39+
public GrayGlobalFilter(
40+
GrayRequestProperties grayRequestProperties,
41+
RoutingConnectionPoint routingConnectionPoint,
42+
RequestLocalStorage requestLocalStorage) {
3943
this.grayRequestProperties = grayRequestProperties;
4044
this.routingConnectionPoint = routingConnectionPoint;
45+
this.requestLocalStorage = requestLocalStorage;
4146
}
4247

4348
@Override
@@ -68,19 +73,35 @@ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
6873
ServerHttpRequest.Builder requestBuilder = exchange.getRequest().mutate();
6974
grayRequest.setAttribute(GRAY_REQUEST_ATTRIBUTE_GATEWAY_HTTPREQUEST_BUILDER, requestBuilder);
7075

76+
recordGrayTrack(exchange);
77+
7178
RoutingConnectPointContext connectPointContext = RoutingConnectPointContext.builder()
7279
.interceptroType("gateway")
7380
.grayRequest(grayRequest).build();
81+
82+
7483
routingConnectionPoint.executeConnectPoint(connectPointContext);
7584

7685
ServerHttpRequest newRequest = requestBuilder.build();
7786
ServerWebExchange newExchange = exchange.mutate().request(newRequest).build();
7887

79-
// try {
80-
return chain.filter(newExchange).doFinally(t->routingConnectionPoint.shutdownconnectPoint(connectPointContext));
81-
// } finally {
82-
// routingConnectionPoint.shutdownconnectPoint(connectPointContext);
83-
// }
88+
return chain.filter(newExchange).doFinally(t -> routingConnectionPoint.shutdownconnectPoint(connectPointContext));
89+
}
90+
91+
92+
/**
93+
* 支持reactor nio event loop
94+
*
95+
* @param exchange
96+
*/
97+
private void recordGrayTrack(ServerWebExchange exchange) {
98+
//todo 需优化
99+
if (requestLocalStorage.getGrayTrackInfo() == null) {
100+
GrayTrackInfo grayTrackInfo = (GrayTrackInfo) exchange.getAttributes().get(GrayTrackWebFilter.GRAY_WEB_TRACK_ATTR_NAME);
101+
if (grayTrackInfo != null) {
102+
requestLocalStorage.setGrayTrackInfo(grayTrackInfo);
103+
}
104+
}
84105
}
85106

86107
@Override

spring-cloud-gray-plugins/spring-cloud-gray-plugin-gateway/src/main/java/cn/springcloud/gray/client/gateway/configuration/GrayGatewayAutoConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cn.springcloud.gray.client.config.properties.GrayRequestProperties;
44
import cn.springcloud.gray.client.gateway.GatewayRequestInterceptor;
55
import cn.springcloud.gray.client.gateway.GrayGlobalFilter;
6+
import cn.springcloud.gray.request.RequestLocalStorage;
67
import cn.springcloud.gray.routing.connectionpoint.RoutingConnectionPoint;
78
import org.springframework.beans.factory.annotation.Autowired;
89
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -17,8 +18,8 @@ public class GrayGatewayAutoConfiguration {
1718
private GrayRequestProperties grayRequestProperties;
1819

1920
@Bean
20-
public GrayGlobalFilter grayGlobalFilter(RoutingConnectionPoint routingConnectionPoint) {
21-
return new GrayGlobalFilter(grayRequestProperties, routingConnectionPoint);
21+
public GrayGlobalFilter grayGlobalFilter(RoutingConnectionPoint routingConnectionPoint, RequestLocalStorage requestLocalStorage) {
22+
return new GrayGlobalFilter(grayRequestProperties, routingConnectionPoint, requestLocalStorage);
2223
}
2324

2425

spring-cloud-gray-plugins/spring-cloud-gray-plugin-webflux/src/main/java/cn/springcloud/gray/web/filter/GrayTrackWebFilter.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
import reactor.core.publisher.Mono;
1111

1212

13-
1413
public class GrayTrackWebFilter implements WebFilter {
1514

15+
public static final String GRAY_WEB_TRACK_ATTR_NAME = "GrayWebTrack";
16+
1617
private RequestLocalStorage requestLocalStorage;
1718

1819
private GrayTrackHolder grayTrackHolder;
@@ -28,10 +29,19 @@ public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
2829
GrayHttpTrackInfo webTrack = new GrayHttpTrackInfo();
2930
grayTrackHolder.recordGrayTrack(webTrack, new ServerHttpRequestWrapper(exchange.getRequest()));
3031
requestLocalStorage.setGrayTrackInfo(webTrack);
31-
// try {
32-
return chain.filter(exchange).doFinally(t->requestLocalStorage.removeGrayTrackInfo());
33-
// } finally {
34-
// ;
35-
// }
32+
33+
recordGrayTrack(exchange, webTrack);
34+
return chain.filter(exchange).doFinally(t -> requestLocalStorage.removeGrayTrackInfo());
35+
}
36+
37+
/**
38+
* 支持reactor nio event loop
39+
*
40+
* @param exchange
41+
* @param webTrack
42+
*/
43+
private void recordGrayTrack(ServerWebExchange exchange, GrayHttpTrackInfo webTrack) {
44+
////todo 需优化
45+
exchange.getAttributes().put(GRAY_WEB_TRACK_ATTR_NAME, webTrack);
3646
}
3747
}

0 commit comments

Comments
 (0)