上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.1.2 调用链与调用树
将按过程调用方式处理一次请求时所用到的方法串联起来就是一条调用链。在Sentinel中,只是将一次调用所经过的资源串联起来。在同一条调用链上的资源可以共享一些变量。
假设调用订单支付接口完成订单支付需要调用某宝的支付接口,并且在支付完成后调用内部的其他服务接口,代码如下。
其中,orderPay、aliPay、other这3个方法都是被Sentinel保护的资源。那么,此案例中共有两条调用链,这两条调用链有相同的入口资源节点——POST:/orderPay,如图2.1和图2.2所示。
图2.1 调用链1
图2.2 调用链2
调用树是由整个应用的所有调用链构造而成的一棵N叉树。从根节点到每一个叶子节点所形成的路径都是一条完整的资源调用链,这些调用链都有一个共同的根节点——ROOT,如图2.3所示。
其中,根节点(ROOT)和入口节点(sentinel_spring_web_context)是调用链上的非资源节点,而POST:/orderPay节点、POST:/aliPay节点和POST:/other节点都是资源节点。
除根节点(ROOT)外,调用树上的每条调用链都可能与其他调用链有着共同的入口节点,因此,入口相同的调用链并不代表它们就是同一条调用链。
图2.3 调用树
在图2.3中,对于资源节点POST:/aliPay与资源节点POST:/other所在的调用链,它们都有着共同的根节点ROOT、共同的入口(非资源)节点sentinel_spring_web_context和共同的入口资源节点POST:/orderPay。