seatinel core版本为1.7版本
Sentinel的熔断是由slotchain中的最后一个DegradeSlot来实现的
public class DegradeSlot extends AbstractLinkedProcessorSlot<DefaultNode> {
@Override
public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count,
boolean prioritized, Object... args) throws Throwable {
//在触发后续slot前执行熔断的检查
performChecking(resourceWrapper);
//触发后续的slot
fireEntry(context, resourceWrapper, node, count, prioritized, args);
}
void performChecking(ResourceWrapper r) throws BlockException {
//通过资源名称获取所有的熔断CircuitBreaker
List<CircuitBreaker> circuitBreakers = DegradeRuleManager.getCircuitBreakers(r.getName());
if (circuitBreakers == null || circuitBreakers.isEmpty()) {
return;
}
for (CircuitBreaker cb : circuitBreakers) {
//cb.tryPass里面只做了状态检查 , 熔断是否关闭或者打开
if (!cb.tryPass()) {
//该异常为BlockException子类
throw