• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

tcc-final: tcc分布式事务解决方案

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

tcc-final

开源软件地址:

https://gitee.com/HuanPoSui/tcc-final

开源软件介绍:

tcc-final

介绍

tcc分布式事务解决方案

通常一个请求到达网关,经由网关到APP中心,APP中心调用服务完成业务流程。这里是在APP中心里增加了ucc层,使用ucc调用服务。一个ucc代表一个完整的业务流程。

一个业务分为try、confirm、cancel方法。try执行通过,confirm、cancel必须保证能正常执行。每一个完整的业务流程都要求有一个全分布式系统唯一的tcc_id。

软件架构

sql
tcc_db.sql 核心sql,记录ucc,bs相关信息;tcc_acount_points.sql、tcc_acount_pay.sql应用例子sql。应用例子是为了说明tcc-final的使用和测试。

tcc-final-coretcc-final核心,包含切面的定义等。

tcc-final-conststcc-final常量定义。

tcc-springcloud-startertcc-final结合springcloud eureka使用时须导入此包。

tcc-final-cloud-eurekatcc-final结合springcloud使用例子tcc-cloud-pay-api 账户支付接口tcc-cloud-pay 账户支付业务tcc-cloud-points-api 账户积分接口tcc-cloud-points账户积分业务tcc-cloud-server eureka服务中心tcc-cloud-web-app app应用中心,在这里使用ucc调用业务tcc-final-sure 定时6秒查找因各种异常原因超过3分钟未正常执行完的ucc,然后使之正常执行完

安装教程

  1. 暂时只适合springcloud eureka使用

  2. 在应用中心,引入tcc-final-core包,在定义ucc接口和实现类。在ucc接口有分布式事务的方法上加@TccTransaction(ucc = true)在ucc实现类里调用各业务接口完成业务流程。在需要参与分布式事务的接口try方法上加@TccTransaction如果一个ucc发生了变化,需加入ver参数使生成新的ucc流程定义。eg.@TccTransaction(ucc = true,ver = 1)//版本号变更会生成新的tcc_bsbs的confirm、cancel方法名字默认为try方法名首字母大写在在前面加上confirm、cancel;如果bs自定义了不一样的confirm、cancel方法名,需
    在注解上加上confirm,cancel方法名参数

    @TccTransaction只在接口方法上使用。只用于ucc和bs接口。

  3. tcc-final-core当ucc执完try方法正常结束则执行各业务confirm,如try过程中异常则执行各业务cancel。

  4. tcc-final-sure 定时6秒查找因各种异常原因超过3分钟未正常执行完的ucc,然后使之正常执行完

使用说明

一个完整的分布式业务流程就是一个ucc。其try尝试执行,如try能通过,则confirm一定能正常执行通过。如果try无法执行通过,则cancel一定能正常执行通过。保证的是最终一致性,try是尝试执行,并记录业务信息,confirm是确认,cancel是回退到最初,confirm、cancel都是通过try记录的业务信息来执行的。 这里业务服务示例应该用mq或其它做一个幂等。eg。一个简单的业务,账户支付、账户加积分,最终一起成功或失败。 支付10元,加100积分。则try方法为支付账户里减10元,积分账户不动,并在 记录表里记下这次业务数据;  假设先执行的是积分服务;try都执行通过,那么confirm方法支付账户不动,积分账户里加上100积分,完成业务流程;   支付try执行不通过,则执行cancel,积分账户不动,支付账户里加上业务数据里记录的10元钱,完成业务流程。tcc-final-sure 定时6秒查找因各种异常原因超过3分钟未正常执行完的ucc,比如应用中心突然挂机了,然后调用bs执行完业务流程

更新后续

1.数据库变更为多库,一表变为多表,增加并发量2.增加其它项目子包,使之能结合dubbo等其它框架使用3.更改一些方式,使之异步执行confirm和cancel各业务4.增加其它持久化方法,使之可以不一定非得用数据库来持久分布式信息5.增加一个外部记录类,代替printStackTrace,使异常信息直接输入到业务系统指定地方。默认实现为在系统控制台打印。6.分布式事务数据中心。分布式事务数据不直接物理删除,移到history表中。展现管理各分布式事务数据。7.业务示例用mq队列或其它方式做一个幂等控制

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

码云特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. 码云官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解码云上的优秀开源项目
  4. GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
  5. 码云官方提供的使用手册 https://gitee.com/help
  6. 码云封面人物是一档用来展示码云会员风采的栏目 https://gitee.com/gitee-stars/

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap