源码解析Seata如何通过Dubbo传递XID
本文作者:FUNKYE(陈健斌),杭州某互联网公司主程。
前言
1.首先来看下包结构,在seata-dubbo和seata-dubbo-alibaba下有统一由TransactionPropagationFilter这个类,分别对应apache-dubbo跟alibaba-dubbo.
分析源码
1 | package io.seata.integration.dubbo; |
1.根据源码,我们可以推出相应的逻辑处理
要点知识
1.Dubbo @Activate注解:
1 |
|
可以分析得知,Seata的dubbo过滤器上的注解@Activate(group = {Constants.PROVIDER, Constants.CONSUMER}, order = 100),表示dubbo的服务提供方跟消费方都会触发到这个过滤器,所以我们的Seata发起者会产生一个XID的传递,上述流程图跟代码已经很清晰的表示了.
2.Dubbo隐式传参可以通过 RpcContext
上的 setAttachment
和 getAttachment
在服务消费方和提供方之间进行参数的隐式传递。
获取:RpcContext.getContext().getAttachment(RootContext.KEY_XID);
传递:RpcContext.getContext().setAttachment(RootContext.KEY_XID, xid);
总结
更多源码阅读请访问Seata官网