fix:use path parameter in `@FeignClient` for circuit-breaker. (#1028)

pull/1037/head
Haotian Zhang 2 years ago committed by GitHub
parent be5b29976a
commit c07143fdb3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -12,3 +12,4 @@
- [docs:update Polaris test environment ip.](https://github.com/Tencent/spring-cloud-tencent/pull/1012) - [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) - [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) - [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)

@ -18,11 +18,16 @@
package com.tencent.cloud.polaris.circuitbreaker.feign; package com.tencent.cloud.polaris.circuitbreaker.feign;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;
import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContext;
import feign.Target; import feign.Target;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.CircuitBreakerNameResolver; import org.springframework.cloud.openfeign.CircuitBreakerNameResolver;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import static org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation; import static org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation;
@ -34,13 +39,31 @@ import static org.springframework.core.annotation.AnnotatedElementUtils.findMerg
*/ */
public class PolarisCircuitBreakerNameResolver implements CircuitBreakerNameResolver { public class PolarisCircuitBreakerNameResolver implements CircuitBreakerNameResolver {
private static final Logger LOG = LoggerFactory.getLogger(PolarisCircuitBreakerNameResolver.class);
@Override @Override
public String resolveCircuitBreakerName(String feignClientName, Target<?> target, Method method) { public String resolveCircuitBreakerName(String feignClientName, Target<?> target, Method method) {
String serviceName = target.name(); String serviceName = target.name();
RequestMapping requestMapping = findMergedAnnotation(method, RequestMapping.class);
String path = ""; String path = "";
// Get path in @FeignClient.
if (StringUtils.hasText(target.url())) {
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) { if (requestMapping != null) {
path = requestMapping.path().length == 0 ? path += requestMapping.path().length == 0 ?
requestMapping.value().length == 0 ? "" : requestMapping.value()[0] : requestMapping.value().length == 0 ? "" : requestMapping.value()[0] :
requestMapping.path()[0]; requestMapping.path()[0];
} }

Loading…
Cancel
Save