Skip to content

Commit 0ca0ded

Browse files
committed
修复灰度追踪的bug
1 parent 1c2f57f commit 0ca0ded

File tree

4 files changed

+46
-6
lines changed

4 files changed

+46
-6
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public abstract class AbstractGrayManager implements GrayManager {
2525

2626
private GrayDecisionFactoryKeeper grayDecisionFactoryKeeper;
2727
private Map<String, List<RequestInterceptor>> requestInterceptors = new HashMap<>();
28+
private List<RequestInterceptor> communalRequestInterceptors = ListUtils.EMPTY_LIST;
2829

2930

3031
public AbstractGrayManager(
@@ -37,7 +38,7 @@ public AbstractGrayManager(
3738
public List<RequestInterceptor> getRequeestInterceptors(String interceptroType) {
3839
List<RequestInterceptor> list = requestInterceptors.get(interceptroType);
3940
if (list == null) {
40-
return ListUtils.EMPTY_LIST;
41+
return communalRequestInterceptors;
4142
}
4243
return list;
4344
}
@@ -78,8 +79,8 @@ private GrayDecision createGrayDecision(PolicyDefinition policyDefinition) {
7879

7980
public void setRequestInterceptors(Collection<RequestInterceptor> requestInterceptors) {
8081
Map<String, List<RequestInterceptor>> requestInterceptorMap = new HashMap<>();
82+
List<RequestInterceptor> all = new ArrayList<>();
8183
if (CollectionUtils.isNotEmpty(requestInterceptors)) {
82-
List<RequestInterceptor> all = new ArrayList<>();
8384
for (RequestInterceptor interceptor : requestInterceptors) {
8485
if (StringUtils.equals(interceptor.interceptroType(), "all")) {
8586
all.add(interceptor);
@@ -93,8 +94,11 @@ public void setRequestInterceptors(Collection<RequestInterceptor> requestInterce
9394
}
9495
}
9596
putTypeAllTo(requestInterceptorMap, all);
97+
this.communalRequestInterceptors = all;
9698
}
99+
this.communalRequestInterceptors = all;
97100
this.requestInterceptors = requestInterceptorMap;
101+
98102
}
99103

100104
private void putTypeAllTo(Map<String, List<RequestInterceptor>> requestInterceptorMap, List<RequestInterceptor> all) {

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/web/tracker/HttpHeaderGrayInfoTracker.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import org.springframework.util.StringUtils;
77

88
import javax.servlet.http.HttpServletRequest;
9+
import java.util.ArrayList;
910
import java.util.Enumeration;
11+
import java.util.List;
1012

1113
@Slf4j
1214
public class HttpHeaderGrayInfoTracker implements HttpGrayInfoTracker {
@@ -23,11 +25,13 @@ public void call(TrackArgs<GrayHttpTrackInfo, HttpServletRequest> args) {
2325

2426
for (String header : defValue.split(",")) {
2527
Enumeration<String> headerValues = request.getHeaders(header);
28+
List<String> values = new ArrayList<>();
2629
while (headerValues.hasMoreElements()) {
2730
String value = headerValues.nextElement();
28-
trackInfo.addHeader(header, value);
29-
log.debug("记录下header:{} -> {}", header, value);
31+
values.add(value);
3032
}
33+
log.debug("记录下header:{} -> {}", header, values);
34+
trackInfo.setHeader(header, values);
3135
}
3236
}
3337
}

spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/src/main/java/cn/springcloud/service/a/rest/TestResource.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,40 @@
11
package cn.springcloud.service.a.rest;
22

3+
import cn.springcloud.gray.request.GrayHttpTrackInfo;
34
import com.google.common.collect.ImmutableMap;
5+
import lombok.extern.slf4j.Slf4j;
46
import org.apache.commons.lang.StringUtils;
57
import org.springframework.beans.factory.annotation.Autowired;
68
import org.springframework.core.env.Environment;
79
import org.springframework.web.bind.annotation.*;
810

11+
import javax.servlet.http.HttpServletRequest;
12+
import java.util.Enumeration;
913
import java.util.Map;
1014

1115
/**
1216
* Created by saleson on 2017/10/18.
1317
*/
1418
@RestController
1519
@RequestMapping("/api/test")
20+
@Slf4j
1621
public class TestResource {
1722
@Autowired
1823
Environment env;
1924

2025
@RequestMapping(value = "/get", method = RequestMethod.GET)
2126
@ResponseBody
22-
public Map<String, String> testGet(@RequestParam(value = "version", required = false) String version) {
27+
public Map<String, String> testGet(
28+
@RequestParam(value = "version", required = false) String version,
29+
HttpServletRequest request) {
30+
Enumeration<String> names = request.getHeaderNames();
31+
while (names.hasMoreElements()) {
32+
String name = names.nextElement();
33+
if (StringUtils.startsWith(name, GrayHttpTrackInfo.GRAY_TRACK_HEADER_PREFIX)) {
34+
log.info("{}:{}", name, request.getHeader(name));
35+
}
36+
}
37+
request.getHeader("");
2338
return ImmutableMap.of("test", "success.", "version", StringUtils.defaultIfEmpty(version, ""), "serverPort", env.getProperty("server.port"));
2439
}
2540

spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/rest/TestResource.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
package cn.springcloud.gray.service.b.rest;
22

3+
import cn.springcloud.gray.request.GrayHttpTrackInfo;
34
import cn.springcloud.gray.service.b.feign.TestClient;
45
import com.google.common.collect.ImmutableMap;
6+
import lombok.extern.slf4j.Slf4j;
57
import org.springframework.beans.factory.annotation.Autowired;
68
import org.springframework.util.StringUtils;
79
import org.springframework.web.bind.annotation.*;
810
import org.springframework.web.client.RestTemplate;
911

1012
import javax.servlet.http.HttpServletRequest;
13+
import java.util.Enumeration;
1114
import java.util.Map;
1215

1316
/**
1417
* Created by saleson on 2017/10/18.
1518
*/
1619
@RestController
1720
@RequestMapping("/api/test")
21+
@Slf4j
1822
public class TestResource {
1923
@Autowired
2024
private RestTemplate restTemplate;
@@ -57,7 +61,20 @@ public Map<String, Object> restTemplateGet(HttpServletRequest request) {
5761
*/
5862
@RequestMapping(value = "/feignGet", method = RequestMethod.GET)
5963
@ResponseBody
60-
public Map<String, Object> feignGet(@RequestParam(value = "version", required = false) String version) {
64+
public Map<String, Object> feignGet(
65+
@RequestParam(value = "version", required = false) String version,
66+
HttpServletRequest request) {
67+
Enumeration<String> names = request.getHeaderNames();
68+
while (names.hasMoreElements()) {
69+
String name = names.nextElement();
70+
if (org.apache.commons.lang.StringUtils.startsWith(name, GrayHttpTrackInfo.GRAY_TRACK_HEADER_PREFIX)) {
71+
log.info("{}:{}", name, request.getHeader(name));
72+
Enumeration<String> values = request.getHeaders(name);
73+
while (values.hasMoreElements()) {
74+
System.out.println(values.nextElement());
75+
}
76+
}
77+
}
6178
Map map = testClient.testGet(version);
6279
return ImmutableMap.of("feignGet", "success.", "service-a-result", map);
6380
}

0 commit comments

Comments
 (0)