导航:首页 > 源码编译 > 38个声明式事务源码

38个声明式事务源码

发布时间:2023-08-15 22:37:09

Ⅰ 分布式事务解决方案ServiceComb - Omega源码阅读与分享

ServiceComb已经是Apache的顶级项目,包含两个组件,即 alpha 和 omega。

源码地址:https://github.com/apache/servicecomb-pack

alpha 是事务协调中心,保存事务日志,通过日志协调各个分支

demo 里面项目的各框架的例子:spring和bbo saga tcc

docs 设计文档,最先应该熟悉的。

omega 负责与alpha通讯,子事务逻辑

pack-contracts gRPC通讯接口定义文件,通过中间文件生成客户端与服务端面代码,让开发者不必关心通讯过程

web 用angular写的web界面,可以查看事务的状态。

我们主要关注的alpha和omega的代码,gRPC知识是通讯基础非常重要,最好先了解gRPC和probuf、Kyro序列化对阅读源码

还是很有帮助的。但通讯部分只是简单带过。

GlobalTxId全局事务ID标记子事务是否同属性一个事务中

ParentTxId 父类的事务ID

localTxId子事务Id

Omega会面向切面编程的方式,向程序中注入相应的逻辑,初始化事务上下文OmegaContext,在事务处理的过程中向alpha报告事务状态,

实现saga协调协议和TCC协调协议,下面就是omega客户端要配置了三个信息

omega.enable=true或@EnableOmega的作用只标记开启Omega,Omega在SpringBoot上初始化过程:

OmegaSpringAutoConfiguration 通过@Configuration,在Spring框架启动时加载并配置

OmegaSpringConfig

作用:初始化各Bean,IdGenerator用来生成子事务Id Saga的事件Sender Tcc事件Sender回调CallbackContext

TransactionAspectConfig

对@SagaStart @Compensable注解AOP的切面编程对象初始

Omega内部机制:SagaStartAspect @SagaStart的AOP切面编程

TransactionAspect对@Compensable注解AOP切面编程

成功场景下,每个事务都会有开始和对应的结束事件。

TransactionAspect=>DefaultRecovery=>CompensableInterceptor

封装了通讯组件:bbo fegin resttemplate servicecomb实现的通讯

这些组件各自通讯的基础上,在服务之间相互调用时,把globalTxId和localTxId传递过去,并注入Context中

如:omega-transport->omega-transport-resttemplate

RestTemplateConfig 配置拦截器

:把当前的上下文的globalTxId和localTxId放到请求里

TransactionHandlerInterceptor 服务提供者,把resttemplate传递过来的globalTxId和localTxId放到当前上下文里,

pack-contracts->pack-contract-grpc

gRPC的接口服务定义文件:GrpcCommon.proto GrpcTccEvent.protogrpcTxEvent.proto:这些文件在protobuf命令直接编译java代码。

如何使用请看:proto文件gRpc基础

谢谢能看到最后的人:我分享我是怎么阅读源码的。源码阅读不能一上来就找到main入口一行一行的看。最先应该了解基本的组成架构、和用到了哪些技术栈,如果还用了你从来没见的技术,建议先去学习这门新的技术,再回头来看代码,熟悉了各模块相对应的功能后。我会找到一个切入口,猜一下它的实现方式,再根据猜测,带着疑问,去找答案。如果对整个项目的模块不是很清楚,最好先把源码里的Demo正常的运行。通过这样的简单学习,一步步的深入。有的代码的抽象是比较复杂的。可先跳过,当你对整个结构都非常了解了,这时再回头去读剩下的难点。最后有个总结有个对比就是最好结果。

阅读全文

与38个声明式事务源码相关的资料

热点内容
linuxshellif包含字符串 浏览:299
设置里面的邮箱怎么登录安卓 浏览:716
androidwebview电话 浏览:246
为什么优盘里的文件夹都不见了 浏览:602
单车旅行pdf 浏览:266
手机桌面合并文件夹打不开 浏览:431
linuxcnull 浏览:265
javaformat字符 浏览:672
精打细算的程序员 浏览:878
android游戏开发工具 浏览:784
javaobject判空 浏览:27
手机检查源码后门软件 浏览:676
恩布拉克变频压缩机 浏览:45
怎么给应用加密码oppoa57 浏览:783
phpsocket发送邮件 浏览:639
php汉字分割 浏览:496
程序员休息一周 浏览:342
顺心捷达app下载软件叫什么 浏览:58
python中pydoc 浏览:694
银行生活app是什么意思 浏览:919