fix: change Feign client single method configuration key

Change key format, UserClient#methodName(Type,Type) -> user#methodName(Type,Type).
String before the '#', changed to Feign client name.

Fix code format.
pull/2342/head
Freeman Lau 3 years ago
parent 1ce2501bc0
commit 0a04d921a4

@ -13,39 +13,47 @@ import org.springframework.cloud.openfeign.CircuitBreakerNameResolver;
/**
* Feign client circuit breaker name resolver.
*
* <p> <strong>note:</strong> spring cloud openfeign version need greater than 3.0.4.
* <p>
* <strong>note:</strong> spring cloud openfeign version need greater than 3.0.4.
*
* @author freeman
* @see CircuitBreakerNameResolver
*/
public class FeignClientCircuitNameResolver implements CircuitBreakerNameResolver {
private Map configurations;
public FeignClientCircuitNameResolver(AbstractCircuitBreakerFactory factory) {
configurations = getConfigurations(factory);
}
@Override
public String resolveCircuitBreakerName(String feignClientName,
Target<?> target, Method method) {
String key = Feign.configKey(target.type(), method);
if (configurations != null && configurations.containsKey(key)) {
return key;
}
return feignClientName;
}
private Map getConfigurations(AbstractCircuitBreakerFactory factory) {
try {
Method getConfigurations = AbstractCircuitBreakerFactory.class.getDeclaredMethod("getConfigurations");
getConfigurations.setAccessible(true);
return (Map) getConfigurations.invoke(factory);
} catch (Exception ignored) {
}
return Collections.emptyMap();
}
private final Map configurations;
public FeignClientCircuitNameResolver(AbstractCircuitBreakerFactory factory) {
configurations = getConfigurations(factory);
}
@Override
public String resolveCircuitBreakerName(String feignClientName, Target<?> target,
Method method) {
String key = getKey(feignClientName, target, method);
if (configurations != null && configurations.containsKey(key)) {
return key;
}
return feignClientName;
}
private String getKey(String feignClientName, Target<?> target, Method method) {
String key = Feign.configKey(target.type(), method);
return feignClientName + key.substring(key.indexOf('#'));
}
private Map getConfigurations(AbstractCircuitBreakerFactory factory) {
try {
Method getConfigurations = AbstractCircuitBreakerFactory.class
.getDeclaredMethod("getConfigurations");
getConfigurations.setAccessible(true);
return (Map) getConfigurations.invoke(factory);
}
catch (Exception ignored) {
}
return Collections.emptyMap();
}
}

@ -50,11 +50,11 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
"feign.sentinel.rules.user[0].timeWindow=1",
"feign.sentinel.rules.user[0].statIntervalMs=1000",
"feign.sentinel.rules.user[0].minRequestAmount=5",
"feign.sentinel.rules.[UserClient#specificFeignMethod(boolean)][0].grade=2",
"feign.sentinel.rules.[UserClient#specificFeignMethod(boolean)][0].count=1",
"feign.sentinel.rules.[UserClient#specificFeignMethod(boolean)][0].timeWindow=1",
"feign.sentinel.rules.[UserClient#specificFeignMethod(boolean)][0].statIntervalMs=1000",
"feign.sentinel.rules.[UserClient#specificFeignMethod(boolean)][0].minRequestAmount=5" })
"feign.sentinel.rules.[user#specificFeignMethod(boolean)][0].grade=2",
"feign.sentinel.rules.[user#specificFeignMethod(boolean)][0].count=1",
"feign.sentinel.rules.[user#specificFeignMethod(boolean)][0].timeWindow=1",
"feign.sentinel.rules.[user#specificFeignMethod(boolean)][0].statIntervalMs=1000",
"feign.sentinel.rules.[user#specificFeignMethod(boolean)][0].minRequestAmount=5" })
public class FeignClientCircuitBreakerRuleIntegrationTest {
@Autowired

Loading…
Cancel
Save