From 2df485b621285d9a64cbd8c82fa341290b175219 Mon Sep 17 00:00:00 2001 From: andrewshan Date: Tue, 24 May 2022 12:09:58 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=94=AF=E6=8C=81=E8=A7=84?= =?UTF-8?q?=E5=88=99=E8=B7=AF=E7=94=B1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feign/RouterLabelFeignInterceptor.java | 4 +++ .../gateway/GatewayController.java | 33 +++++++++++++++++-- .../grayrelease/gateway/RouterService.java | 4 +-- .../polaris/context/ServiceRuleManager.java | 1 + 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptor.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptor.java index a8d2a5659..ef4ac450f 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptor.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptor.java @@ -116,6 +116,10 @@ public class RouterLabelFeignInterceptor implements RequestInterceptor, Ordered } // pass label by header + if (escapeLabels.size() == 0) { + requestTemplate.header(RouterConstants.ROUTER_LABEL_HEADER); + return; + } requestTemplate.header(RouterConstants.ROUTER_LABEL_HEADER, JacksonUtils.serialize2Json(escapeLabels)); } diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GatewayController.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GatewayController.java index 1486d334c..e7ac65ba9 100644 --- a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GatewayController.java +++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/GatewayController.java @@ -18,9 +18,14 @@ package com.tencent.cloud.polaris.router.grayrelease.gateway; +import java.util.HashMap; +import java.util.Map; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -34,14 +39,36 @@ public class GatewayController { @Autowired private RouterService routerService; + private final Map uidMapping; + + public GatewayController() { + String mapping = System.getenv("uid_env_mapping"); + uidMapping = parseUidMapping(mapping); + System.out.println("parsed mapping is " + uidMapping); + } + /** * Get information of callee. * @return information of callee */ - @GetMapping("/entry") - public String rest() { + @GetMapping("/route_rule") + public String routeRule(@RequestHeader("uid") int userId) { String appName = environment.getProperty("spring.application.name"); - String resp = routerService.rest(); + String resp = routerService.restByUser(userId); return appName + " -> " + resp; } + + private Map parseUidMapping(String mapText) { + Map result = new HashMap<>(); + if (!StringUtils.hasText(mapText)) { + return result; + } + String[] tokens = mapText.split("\\|"); + for (String token : tokens) { + String[] pairs = token.split(":"); + result.put(Integer.parseInt(pairs[0]), pairs[1]); + } + return result; + } + } diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/RouterService.java b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/RouterService.java index 95f066f8a..23ffb30a0 100644 --- a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/RouterService.java +++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/router-grayrelease-gateway/src/main/java/com/tencent/cloud/polaris/router/grayrelease/gateway/RouterService.java @@ -20,6 +20,7 @@ package com.tencent.cloud.polaris.router.grayrelease.gateway; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; /** * Router callee feign client. @@ -30,6 +31,5 @@ import org.springframework.web.bind.annotation.GetMapping; public interface RouterService { @GetMapping("/router/gray/rest") - String rest(); - + String restByUser(@RequestHeader("uid") int user); } diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/ServiceRuleManager.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/ServiceRuleManager.java index 8b3fb16d4..1a0af32b4 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/ServiceRuleManager.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/ServiceRuleManager.java @@ -84,6 +84,7 @@ public class ServiceRuleManager { ServiceEventKey srcSvcEventKey = new ServiceEventKey(new ServiceKey(namespace, sourceService), ServiceEventKey.EventType.ROUTING); + routerKeys.add(srcSvcEventKey); DefaultServiceEventKeysProvider svcKeysProvider = new DefaultServiceEventKeysProvider(); svcKeysProvider.setSvcEventKeys(routerKeys);