From ead0a6ea6ddfe96622dfa12c31583d3f7208f2d8 Mon Sep 17 00:00:00 2001 From: Haotian Zhang <928016560@qq.com> Date: Mon, 5 Jun 2023 11:01:49 +0800 Subject: [PATCH] fix:use path parameter in `@FeignClient` for circuit-breaker. --- CHANGELOG.md | 3 ++- .../PolarisCircuitBreakerNameResolver.java | 24 +++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12ab12413..901e8c2bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,4 +11,5 @@ - [docs:add release GitHub Action.](https://github.com/Tencent/spring-cloud-tencent/pull/1007) - [docs:update Polaris test environment ip.](https://github.com/Tencent/spring-cloud-tencent/pull/1012) - [fix:fix custom fallback exception.](https://github.com/Tencent/spring-cloud-tencent/pull/1022) -- [feat: sct-all package is now available as a shaded uber-jar.](https://github.com/Tencent/spring-cloud-tencent/pull/1025) \ No newline at end of file +- [feat: sct-all package is now available as a shaded uber-jar.](https://github.com/Tencent/spring-cloud-tencent/pull/1025) +- [fix:use path parameter in `@FeignClient` for circuit-breaker.](https://github.com/Tencent/spring-cloud-tencent/pull/1028) \ No newline at end of file diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisCircuitBreakerNameResolver.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisCircuitBreakerNameResolver.java index 929a71d22..2768344f1 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisCircuitBreakerNameResolver.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisCircuitBreakerNameResolver.java @@ -18,9 +18,13 @@ package com.tencent.cloud.polaris.circuitbreaker.feign; import java.lang.reflect.Method; +import java.net.URI; +import java.net.URISyntaxException; import com.tencent.cloud.common.metadata.MetadataContext; import feign.Target; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.CircuitBreakerNameResolver; import org.springframework.web.bind.annotation.RequestMapping; @@ -34,13 +38,29 @@ import static org.springframework.core.annotation.AnnotatedElementUtils.findMerg */ public class PolarisCircuitBreakerNameResolver implements CircuitBreakerNameResolver { + private static final Logger LOG = LoggerFactory.getLogger(PolarisCircuitBreakerNameResolver.class); + @Override public String resolveCircuitBreakerName(String feignClientName, Target target, Method method) { String serviceName = target.name(); - RequestMapping requestMapping = findMergedAnnotation(method, RequestMapping.class); String path = ""; + + // Get path in @FeignClient. + URI uri = null; + try { + uri = new URI(target.url()); + } + catch (URISyntaxException e) { + LOG.warn("Generate URI from url({}) in @FeignClient. failed.", target.url()); + } + if (uri != null) { + path += uri.getPath(); + } + + // Get path in @RequestMapping. + RequestMapping requestMapping = findMergedAnnotation(method, RequestMapping.class); if (requestMapping != null) { - path = requestMapping.path().length == 0 ? + path += requestMapping.path().length == 0 ? requestMapping.value().length == 0 ? "" : requestMapping.value()[0] : requestMapping.path()[0]; }