Sentinel
Sentinel copied to clipboard
Circuit breaker for API gateway | Sentinel网关熔断降级
现在系统需要在网关(SpringCloud Gateway)中实现sentinel熔断降级,Sentinel网关熔断降级可否像网关限速(GatewayRuleManager.loadRules())一样以编码的方式将熔断降级规则加载到网关中?
同问,支持在网关处记录异常,进行资源降级吗? 目前测试下来,无效果
同问,支持在网关处记录异常,进行资源降级吗? 目前测试下来,无效果
DegradeRuleManager.loadRules(List<DegradeRule> rules) 这个方法加载熔断规则好像直接没啥用,debug到网关过滤器可以看到熔断规则加载进去了,但是没有熔断降级效果,一开始我以为是没有满足熔断条件。
同问,支持在网关处记录异常,进行资源降级吗? 目前测试下来,无效果
Refer #1842
请问在gateway 中无法熔断。哪怕注解 @SentinelResource(value = "selectUserByName", entryType = EntryType.IN, blockHandler = "selectUserByNameBlockHandler", fallback = "selectUserByNameFallback")
如果使用上述注解,可以进入熔断方法中,但是无法根据设定的70秒熔断时间保持熔断。
同问,现在网关怎么使用熔断规则
可以实现gateway的局部filter,然后设置默认全部过滤。
@Slf4j
@Component
public class SpringCloudCircuitBreakerSentinelFilterFactory
extends SpringCloudCircuitBreakerFilterFactory {
@Autowired(required = false)
public SpringCloudCircuitBreakerSentinelFilterFactory (
ReactiveCircuitBreakerFactory<SentinelConfigBuilder.SentinelCircuitBreakerConfiguration, SentinelConfigBuilder>
reactiveCircuitBreakerFactory,
ObjectProvider<DispatcherHandler> dispatcherHandlerProvider) {
super(reactiveCircuitBreakerFactory, dispatcherHandlerProvider);
if (reactiveCircuitBreakerFactory == null) {
log.warn("ReactiveCircuitBreakerFactory must be required!");
return;
}
List<DegradeRule> degradeRules = new ArrayList<>();
// 设置慢调用等熔断规则
degradeRules.add(new DegradeRule()
.setGrade(CircuitBreakerStrategy.SLOW_REQUEST_RATIO.getType())
.setCount(30000.0d)
.setMinRequestAmount(5)
.setTimeWindow(10)
.setStatIntervalMs(1000)
.setSlowRatioThreshold(0.8d));
Function<String, SentinelConfigBuilder.SentinelCircuitBreakerConfiguration> defaultConfiguration =
id -> new SentinelConfigBuilder().resourceName(id).rules(degradeRules).build();
reactiveCircuitBreakerFactory.configureDefault(defaultConfiguration);
}
@Override
protected Mono<Void> handleErrorWithoutFallback(Throwable t) {
if (t instanceof DegradeException) {
return Mono.error(new ServiceException(ResultCode.SERVER_ERROR));
}
return Mono.error(t);
}
}
spring:
cloud:
gateway:
default-filters:
- CircuitBreaker=SentinelDefault