|
|
@ -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];
|
|
|
|
}
|
|
|
|
}
|
|
|
|