# TCC 补偿事务
## 适用范围
- 强隔离性、严格一致性要求的业务活动
- 适用于执行时间较短的业务(比如处理账户、收费等业务)
## 模块说明
- tcc-account:用户模块
- tcc-order:订单模块
- tcc-capital:资金账户模块
- tcc-integral:积分模块
- tcc-framework:TCC框架,整合了tcc-transaction v1.1.5版本(源代码没有注释),并解决了一些问题,如:Kryo反序列化兼容`spring-boot-devtools`
## 示例演示
### 初始化
1. 下载[完整项目](https://github.com/HasonHuang/distributed-transaction-process)
2. 执行[dbscripts](dbscripts)目录下的sql脚本(PostgreSQL)创建数据库。
3. 修改`tcc-account`的TCC数据源、业务系统数据源
4. 修改`tcc-integral`的TCC数据源、业务系统数据源
### 单层嵌套事务
#### 业务流程
1. 打开注册页面 http://localhost:9000/users/register
2. 输入用户信息并注册
3. 系统创建用户,同时创建资金账户和积分账户,其中一个创建失败都将会引起事务回退;
创建资金账户和创建积分账户的操作,都在`tcc-account`项目中调用执行,该业务属于单层事务嵌套。
#### 启动顺序
1. 启动 ms-discovery-eureka
2. 启动 tcc-account、tcc-integral、tcc-capital
### 多层嵌套事务
1. 打开充值页面 http://localhost:9000/users/recharge
2. 输入用户名和充值金额进行充值
3. `tcc-account`调用微服务`tcc-capital`生成订单并增加资金,后者操作成功后调用积分服务`tcc-integral`增加积分。
调用链 `tcc-account` -> `tcc-capital` -> `tcc-integral`,该业务属于多层事务嵌套。
#### 启动顺序
1. 启动 ms-discovery-eureka
2. 启动 tcc-account、tcc-integral、tcc-capital
## 一些问题
1. TCC框架的`TransactionManager`在回滚时,在下面的标示的位置异常退出,从而无法更新事务,会导致事务补偿操作的参数不是最新的(如果TRY方法中修改了参数的情况)。
```java
/**
* 回滚事务.
*/
public void rollback() {
Transaction transaction = getCurrentTransaction();
transaction.changeStatus(TransactionStatus.CANCELLING);
// !! 这里发生异常,退出JVM !!
transactionConfigurator.getTransactionRepository().update(transaction);
try {
LOG.info("==>transaction begin rollback()");
transaction.rollback();
transactionConfigurator.getTransactionRepository().delete(transaction);
} catch (Throwable rollbackException) {
LOG.error("compensable transaction rollback failed.", rollbackException);
throw new CancellingException(rollbackException);
}
}
```
没有合适的资源?快使用搜索试试~ 我知道了~
分布式事务解决方案.zip
共258个文件
java:194个
xml:26个
properties:12个
需积分: 3 0 下载量 167 浏览量
2024-01-15
11:36:09
上传
评论
收藏 221KB ZIP 举报
温馨提示
方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。
资源推荐
资源详情
资源评论
收起资源包目录
分布式事务解决方案.zip (258个子文件)
.gitignore 291B
recharge.html 554B
register.html 553B
register.html 547B
FormModelMethodArgumentResolver.java 24KB
JdbcTransactionRepository.java 12KB
ResourceCoordinatorInterceptor.java 11KB
MessageServiceImpl.java 7KB
CapitalAccountServiceImpl.java 6KB
CompensableTransactionInterceptor.java 6KB
JsonMapper.java 6KB
FileSystemTransactionRepository.java 6KB
ZooKeeperTransactionRepository.java 5KB
RedisTransactionRepository.java 5KB
TransactionManager.java 5KB
TransactionXid.java 5KB
MessageStatusServiceImpl.java 4KB
HandlerMethodMultiArgumentResolver.java 4KB
Transaction.java 4KB
FactoryBuilder.java 4KB
TransactionRecovery.java 4KB
CachableTransactionRepository.java 4KB
UserServiceImpl.java 4KB
RestExceptionHandler.java 4KB
RecoverScheduledJob.java 4KB
UserServiceImpl.java 4KB
MessageController.java 4KB
Message.java 3KB
PointServiceImpl.java 3KB
BaseMethodArgumentResolver.java 3KB
RedisHelper.java 3KB
AccountPointRecoveryHandlerService.java 3KB
AccountPointStatusConfirmHandlerService.java 3KB
MessageApi.java 3KB
MapWapper.java 3KB
TccTransactionContextAspect.java 3KB
MockConcurrent.java 3KB
TccCompensableAspect.java 3KB
Terminator.java 3KB
User.java 2KB
CompensableMethodUtils.java 2KB
FormModel.java 2KB
User.java 2KB
OrderServiceImpl.java 2KB
RechargeController.java 2KB
MessageRepositoryTest.java 2KB
TccConfig.java 2KB
TccConfig.java 2KB
MessageRepository.java 2KB
TccConfig.java 2KB
MQConfig.java 2KB
CapitalAccountService.java 2KB
CapitalOrder.java 2KB
CapitalController.java 2KB
MessageServiceTest.java 2KB
TccDataSourceProperties.java 2KB
TccDataSourceProperties.java 2KB
TccDataSourceProperties.java 2KB
MessageService.java 2KB
PointService.java 2KB
PointController.java 2KB
TransactionSerializer.java 2KB
RechargeServiceImpl.java 2KB
KryoTransactionSerializer.java 2KB
PointApi.java 2KB
QueueMessageProperties.java 2KB
QueueMessageProperties.java 2KB
MediaTypes.java 2KB
DefaultRecoverConfig.java 2KB
Order.java 1KB
CapitalApi.java 1KB
ReflectionUtils.java 1KB
UserPointReceiver.java 1KB
TccTransactionConfigurator.java 1KB
CapitalServiceClientProxy.java 1KB
JdkSerializationSerializer.java 1KB
CapitalAccount.java 1KB
OrderController.java 1KB
SpringBeanFactory.java 1KB
UserApi.java 1KB
TransactionContext.java 1KB
UserController.java 1KB
UserController.java 1KB
Point.java 1KB
UserController.java 1KB
UserRepositoryTest.java 1KB
PointServiceClientProxy.java 1KB
OrderApi.java 1KB
PointServiceImpl.java 1KB
Participant.java 1KB
UserService.java 1KB
TransactionEntity.java 1KB
UserApi.java 1020B
PointController.java 1018B
PointServiceClientProxy.java 1012B
CheckUtil.java 1007B
InvocationContext.java 988B
TransactionRepository.java 890B
SpringPostProcessor.java 880B
LocalDateTimeAttributeConverter.java 870B
共 258 条
- 1
- 2
- 3
资源评论
JJJ69
- 粉丝: 6003
- 资源: 5593
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功