diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelInvocationHandler.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelInvocationHandler.java index f1f34fd55..eda5ef5d1 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelInvocationHandler.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/feign/SentinelInvocationHandler.java @@ -91,8 +91,8 @@ public class SentinelInvocationHandler implements InvocationHandler { if (target instanceof Target.HardCodedTarget) { Target.HardCodedTarget hardCodedTarget = (Target.HardCodedTarget) target; MethodMetadata methodMetadata = SentinelContractHolder.metadataMap - .get(method.getDeclaringClass().getName() - + Feign.configKey(method.getDeclaringClass(), method)); + .get(hardCodedTarget.type().getName() + + Feign.configKey(hardCodedTarget.type(), method)); // resource default is HttpMethod:protocol://url String resourceName = methodMetadata.template().method().toUpperCase() + ":" + hardCodedTarget.url() + methodMetadata.template().path(); diff --git a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelFeignTests.java b/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelFeignTests.java index b7d03670f..accd536fe 100644 --- a/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelFeignTests.java +++ b/spring-cloud-alibaba-sentinel/src/test/java/org/springframework/cloud/alibaba/sentinel/SentinelFeignTests.java @@ -60,6 +60,9 @@ public class SentinelFeignTests { @Autowired private BarService barService; + @Autowired + private BazService bazService; + @Before public void setUp() { FlowRule rule1 = new FlowRule(); @@ -83,7 +86,14 @@ public class SentinelFeignTests { rule3.setLimitApp("default"); rule3.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT); rule3.setStrategy(RuleConstant.STRATEGY_DIRECT); - FlowRuleManager.loadRules(Arrays.asList(rule1, rule2, rule3)); + FlowRule rule4 = new FlowRule(); + rule4.setGrade(RuleConstant.FLOW_GRADE_QPS); + rule4.setCount(0); + rule4.setResource("GET:http://baz-service/baz"); + rule4.setLimitApp("default"); + rule4.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT); + rule4.setStrategy(RuleConstant.STRATEGY_DIRECT); + FlowRuleManager.loadRules(Arrays.asList(rule1, rule2, rule3,rule4)); } @Test @@ -101,6 +111,9 @@ public class SentinelFeignTests { assertThatExceptionOfType(Exception.class).isThrownBy(() -> { barService.bar(); }); + assertThatExceptionOfType(Exception.class).isThrownBy(() -> { + bazService.baz(); + }); assertNotEquals("ToString method invoke was not in SentinelInvocationHandler", echoService.toString(), fooService.toString()); @@ -146,6 +159,15 @@ public class SentinelFeignTests { String bar(); } + public interface BazService { + @RequestMapping(path = "baz") + String baz(); + } + + @FeignClient(value = "baz-service") + public interface BazClient extends BazService { + } + public static class EchoServiceFallback implements EchoService { @Override