3.1.3 自定义组装ProcessorSlotChain
Sentinel使用SlotChainBuilder将多个ProcessorSlot构造成一个ProcessorSlotChain,由ProcessorSlotChain按照ProcessorSlot的注册顺序调度这些ProcessorSlot。
Sentinel使用Java SPI加载SlotChainBuilder,支持使用者自定义SlotChainBuilder,相当于提供了插件的功能。
默认使用的SlotChainBuilder是DefaultSlotChainBuilder。DefaultSlotChainBuilder构造ProcessorSlotChain的源码如下。
• build方法:用来创建DefaultProcessorSlotChain实例,并注册ProcessorSlot,如NodeSelectorSlot、ClusterBuilderSlot、LogSlot、StatisticSlot、AuthoritySlot、SystemSlot、FlowSlot、DegradeSlot。
DefaultSlotChainBuilder注册的ProcessorSlot并非都是必需的,如果注册的ProcessorSlot中有些用不到,那么可以自己实现一个SlotChainBuilder,自己构造ProcessorSlotChain。
例如,可以将LogSlot、AuthoritySlot和SystemSlot去掉,实现这个操作只需要两步。
(1)编写MySlotChainBuilder类,实现SlotChainBuilder接口,代码如下。
(2)在当前项目的resources/META-INF/services目录下添加名称为com.alibaba.csp.sentinel. slotchain.SlotChainBuilder的接口配置文件,并在配置文件中注册MySlotChainBuilder类,配置代码如下。
需要注意的是ProcessorSlot的注册顺序,NodeSelectorSlot需要作为ClusterBuilderSlot的前驱节点,ClusterBuilderSlot需要作为StatisticSlot的前驱节点,否则Sentinel运行会出现Bug。但可以将DegradeSlot放在FlowSlot的前面。