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);