mysql事务管理模块tm_分布式事务解决方案之TX-LCN

项目介绍

LCN并不生产事务,LCN只是本地事务的搬运工

整体框架

场景1

调用流程如下:

598e3667bf53a1021086cc07ee204db2.png

正常调用时序图如下:

3350c62e73640d315c136787e44b94be.png

参与方B出现异常调用时序图如下:

15e1a4157e397914120a86e7dad9f5e0.png

场景2

调用流程如下:

4520800b7804f649baafcae08e7eb497.png

参与方B出现异常调用时序图如下:

85a8e8321a5a49a42946129c4b18851c.png

快速入门

源码阅读部分

源码目录结构

txlcn-tc:TXLCN分布式事务客户端

txlcn-common:公共模块

txlcn-logger:日志模块。(默认提供日志持久化到MySQL的支持)

txlcn-tm:TXLCN事务管理器

txlcn-txmsg:事务消息扩展接口

txlcn-txmsg-netty:事务消息接口的Netty实现

txlcn-tracing:分布式事务追踪工具

txlcn-tc部分

1、@LcnTransaction

拦截LcnTransaction注解2fd1c20aa6f7d77d3a74dd8edc194868.png

开启事务

61676a01ce2227ed087420a44f849624.png

注意groupId的生成是雪花算法

2、LcnConnectionProxy

public class LcnConnectionProxy implements Connection {

private Connection connection;

public LcnConnectionProxy(Connection connection) {

this.connection = connection;

}

/**

* notify connection

*

* @param state transactionState

* @return RpcResponseState RpcResponseState

*/

public RpcResponseState notify(int state) {

try {

if (state == 1) {

log.debug("commit transaction type[lcn] proxy connection:{}.", this);

connection.commit();

} else {

log.debug("rollback transaction type[lcn] proxy connection:{}.", this);

connection.rollback();

}

connection.close();

log.debug("transaction type[lcn] proxy connection:{} closed.", this);

return RpcResponseState.success;

} catch (Exception e) {

log.error(e.getLocalizedMessage(), e);

return RpcResponseState.fail;

}

}

@Override

public void setAutoCommit(boolean autoCommit) throws SQLException {

connection.setAutoCommit(false);

}

@Override

public void commit() throws SQLException {

//connection.commit();

}

@Override

public void rollback() throws SQLException {

//connection.rollback();

}

@Override

public void close() throws SQLException {

//connection.close();

}

复制代码

3、com.codingapi.txlcn.tc.core.checking.SimpleDTXChecking#startDelayCheckingAsync

12803ffa559a59ea213beee44243ba34.png

txlcn-tm部分

1、com.codingapi.txlcn.txmsg.netty.handler.RpcAnswerHandler

2、com.codingapi.txlcn.tm.core.TransactionManager

3、com.codingapi.txlcn.tm.support.service.TxExceptionService#writeTxException 事务补偿

4、com.codingapi.txlcn.tm.txmsg.transaction.InitClientService4461c242c0dba02b318935eb3c5d28d0.png

5、com.codingapi.txlcn.tm.support.service.impl.TxExceptionServiceImpl#getTransactionInfo

txlcn-tracing事务跟踪

代码很简单

com.codingapi.txlcn.tracing.http.RestTemplateRequestInterceptor和

com.codingapi.txlcn.tracing.http.FeignRequestInterceptor对于feign和restTemplate进行拦截 向header里面放入groupId和X-App-Map信息;

com.codingapi.txlcn.tracing.http.TracingHandlerInterceptor进行拦截接收数据,将上述数据初始化到TracingContext之中。

另外,作者写了一个 TxlcnZoneAvoidanceRule 负载均衡算法

com.codingapi.txlcn.tc.core.transaction.lcn.resource.LcnTransactionResourceProxy 不赘述

重要断点时候变量值

com.codingapi.txlcn.tc.txmsg.LoopMessenger#request(com.codingapi.txlcn.txmsg.dto.MessageDto, long, java.lang.String)

5426aa21f0ba8fa85540ba0f204a04f9.png

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值