{"id":13452663,"url":"https://github.com/changmingxie/tcc-transaction","last_synced_at":"2025-05-12T15:33:01.988Z","repository":{"id":39228844,"uuid":"47442228","full_name":"changmingxie/tcc-transaction","owner":"changmingxie","description":"tcc-transaction是TCC型事务java实现","archived":false,"fork":false,"pushed_at":"2025-01-24T07:50:02.000Z","size":7095,"stargazers_count":5789,"open_issues_count":33,"forks_count":2787,"subscribers_count":520,"default_branch":"master-2.x","last_synced_at":"2025-04-23T17:19:27.511Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/changmingxie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-12-05T04:27:53.000Z","updated_at":"2025-04-21T14:11:07.000Z","dependencies_parsed_at":"2023-02-15T06:45:46.037Z","dependency_job_id":"145dc863-49cd-4480-9ec5-63ce5e814a2f","html_url":"https://github.com/changmingxie/tcc-transaction","commit_stats":{"total_commits":291,"total_committers":21,"mean_commits":"13.857142857142858","dds":0.7525773195876289,"last_synced_commit":"d21a3d748c477fb14a175d5d05e54ef82cf68de6"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changmingxie%2Ftcc-transaction","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changmingxie%2Ftcc-transaction/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changmingxie%2Ftcc-transaction/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/changmingxie%2Ftcc-transaction/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/changmingxie","download_url":"https://codeload.github.com/changmingxie/tcc-transaction/tar.gz/refs/heads/master-2.x","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253765947,"owners_count":21960821,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T08:00:19.629Z","updated_at":"2025-05-12T15:33:01.949Z","avatar_url":"https://github.com/changmingxie.png","language":"Java","funding_links":[],"categories":["CSS","Java","数据库开发","中间件"],"sub_categories":[],"readme":"# TCC-TRANSACTION\n\n## TCC-TRANSACTION是什么\n\n[TCC-TRANSACTION](https://changmingxie.github.io)是一款开源的微服务架构下的TCC型分布式事务解决方案，致力于提供高性能和简单易用的分布式事务服务。\n\n- Try: 尝试执行业务，完成所有业务检查（一致性），预留必须业务资源（准隔离性）\n- Confirm: 确认执行业务，不作任何业务检查，只使用Try阶段预留的业务资源，满足幂等性\n- Cancel: 取消执行业务，释放Try阶段预留的业务资源，满足幂等性\n\n## 微服务架构中分布式事务问题\n\n随着传统的单体架的构微服务化，原本单体架构中不同模块，被拆分为若干个功能简单、松耦合的服务。  \n系统微服务化后，内部可能需要调用多个服务并操作多个数据库实现，服务调用的分布式事务问题变的非常突出。\n\n比如支付退款场景需要从各分账方退回平台收益户(退分账)，再退还给付款方。其中**退分账**阶段，\n涉及从多个分账方(商家1收益户，商家2收益户，商家3收益户，平台手续费账户)扣款，这些账户分布在不同数据库，\n比如商家3收益户扣款失败，其他成功扣款需要回滚，这里需要分布式事务保证一致性。\n![支付退款流程](material/tcc_use_at_refund.jpg)\n\n## 如何解决\n\n如何解决上面**退分账**中分布式事务问题呢？\n选择使用tcc-transaction框架，执行流程如下：\n\n- Try:  \n  商家1收益户-\u003e冻结分账金额  \n  商家2收益户-\u003e冻结分账金额  \n  商家3收益户-\u003e冻结分账金额  \n  平台手续费-\u003e冻结手续费\n- Try成功 =\u003e Confirm:  \n  商家1收益户-\u003e扣除分账金额  \n  商家2收益户-\u003e扣除分账金额  \n  商家3收益户-\u003e扣除分账金额  \n  平台手续费-\u003e扣除手续费  \n  平台收益户-\u003e 增加金额(总分账金额+手续费)\n- Try失败 =\u003e Cancel:   \n  商家1收益户-\u003e解冻分账金额  \n  商家2收益户-\u003e解冻分账金额  \n  商家3收益户-\u003e解冻分账金额  \n  平台手续费-\u003e解冻手续费\n\n## 工作原理\n\n![TCC原理](material/tcc-invoke.webp)\n\n第一阶段：主业务服务分别调用所有从业务的 try 操作，并在活动管理器中登记所有从业务服务。当所有从业务服务的 try 操作都调用成功或者某个从业务服务的 try 操作失败，进入第二阶段。    \n第二阶段：活动管理器根据第一阶段的执行结果来执行 confirm 或 cancel 操作。    \n如果第一阶段所有 try 操作都成功，则活动管理器调用所有从业务活动的 confirm操作。否则调用所有从业务服务的 cancel 操作。    \n需要注意的是第二阶段 confirm 或 cancel 操作本身也是满足最终一致性的过程，在调用 confirm 或 cancel 的时候也可能因为某种原因（比如网络）导致调用失败，所以需要活动管理支持重试的能力，同时这也就要求\nconfirm 和 cancel 操作具有幂等性。\n\n## 快速开始\n\n[官网](https://changmingxie.github.io)    \n[快速开始](https://changmingxie.github.io/zh-cn/docs/tutorial/quickstart.html)  \n[最新可用版本2.x](https://changmingxie.github.io/zh-cn/blog/tcc-transaction-2.x-release.html)  \n\n## 常见问题\n\n[常见问题](https://changmingxie.github.io/zh-cn/docs/faq.html)\n\n## 讨论群\n\n钉钉扫码入群\n\n![钉钉扫码入群](https://raw.githubusercontent.com/changmingxie/tcc-transaction/master-1.6.x/material/tcc-transaction-dingdingtalk.jpg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchangmingxie%2Ftcc-transaction","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchangmingxie%2Ftcc-transaction","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchangmingxie%2Ftcc-transaction/lists"}