上篇我们简单了解了一下Sentinel的整体情况。在学习任何一个框架之前都要了解和熟悉相关的概念,带着这些概念去看源码时才能更容易理解。因此本篇主要先讲解几个Sentinel中的核心概念,加深对它的理解。
- Resource
- Slot
- Context
- Entry
- Node
- Metric
Resource
Resource 是Sentinel中最重要的一个概念,代表一个资源。任何后面需要保护的内容都可抽象成为资源。Sentinel 通过资源来保护具体的业务代码或其他后方服务。用户只需要为受保护的代码或服务定义一个资源,然后针对这个资源定义规则即可。 资源和规则是相互解耦的,资源的规则甚至可以在运行时动态修改。
当我们定义完资源,可以通过在程序中埋点来保护我们的服务。通常有两种方式:
- try{…}catch{…} (使用SphU.entry(…)方法),当 catch 到BlockException时执行异常处理(或fallback)
- if{…}else{…}(使用SphO.entry(…)方法),当返回false时执行异常处理(或fallback)
从0.1.1版本开始,Sentinel支持通过注解的方式进行资源定义,使用@SentinelResource注解。通过注解除了可以定义资源外,还可以指定blockHandler、fallback方法。
Sentinel中具体的资源类为:ResourceWrapper,这是一个抽象包装类,包装了name和EntryType。默认有两个实现类:StringResourceWrapper(对字符串包装,这是一个通用的资源类)和MethodResourceWr