分布式事务框架LCN学习记录

分布式事务框架LCN学习记录

学习LCN的起因是博主所在公司的微服务项目,有一天突然有北京的同事说,分布式事务无法回滚了。博主自己也尝试了一下,在调用的B服务的接口中写了个错误:

int i = 1/0;

运行过后,果然,B服务的数据无法回滚,然后就自己百度百度,学习了一下LCN。

错误原因也被找到,是因为启动类上少了一个**@EnableDistributedTransaction**注解,博主的项目启动类上这个注解是被注释掉的,原因是加上这个注解后,项目无法正常启动。原因是连接不到LCN的地址。问题找到了,但是LCN是公司大佬搭的,这个注解也不是博主给注释掉的,只能将问题反馈,等待解决了。

解释一下LCN的几个注解,个人理解,有不对的地方欢迎指正:

  • @EnableDistributedTransaction
    这个注解作用在启动类上,表示开启LCN事务,当然.properties/.yml文件里还是要配上相应的配置:
tx-lcn.client.manager-address=
tx-lcn.client.concurrent-level=160
tx-lcn.message.netty.attr-delay-time=1000
tx-lcn.message.netty.wait-time=3000
tx-lcn.message.netty.reconnect-count=5
tx-lcn.message.netty.reconnect-delay=6000
tx-lcn.message.netty.channel-pool-size=1
tx-lcn.message.netty.workgroup-thread-size=1
  • @EnableTransactionManagerServer
    这个注解也是作用在启动类上,表示开启LCN的TxManager,至于这个TxManager是啥,博主将他理解为分布式事务的管理中心,意思大概就是那么个意思。而这个TxManager还要依赖redis和eureka,所以要先确保项目里redis和eureka都是没问题的。配置如下:
Ip
tx-lcn.manager.host=127.0.0.1
端口
tx-lcn.manager.port=8070
心跳检测时间(ms)
tx-lcn.manager.heart-time=15000
分布式事务执行总时间
tx-lcn.manager.dtx-time=30000
参数延迟删除时间单位ms
tx-lcn.message.netty.attr-delay-time=10000
tx-lcn.manager.concurrent-level=128
开启日志
tx-lcn.logger.enabled=true
  • @LcnTransaction
    这个就比较简单了,哪个方法需要分布式事务,将注解打在方法上面就行了。

主要流程:

  1. 建一个名称为: tx-manager的表,建表语句如下:
CREATE TABLE `t_tx_exception`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `group_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `unit_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `mod_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `transaction_state` tinyint(4) NULL DEFAULT NULL,
  `registrar` tinyint(4) NULL DEFAULT NULL,
  `remark` varchar(4096) NULL DEFAULT  NULL,
  `ex_state` tinyint(4) NULL DEFAULT NULL COMMENT '0 未解决 1已解决',
  `create_time` datetime(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
  1. 添加Txmanager配置,导jar包,启动类加@EnableTransactionManagerServer启动Txmanager。
  2. 启动Txmanager过后,就可以使用
    IP:端口/admin/index.html#/login访问到后台管理界面
  3. 然后就可以在自己的服务的启动类上加@EnableDistributedTransaction,添加配置,添加相应依赖。
    然后在需要分布式事务的方法上加@LcnTransaction注解,流程都没问题的话,就可以正常用啦!

最后聊一下博主的辛酸工作经历,博主三本院校软件工程专业毕业,大学里啥也没学,天天打篮球,恋爱也没好好谈。毕业前技术巅峰还停留在双重for循环,但是由于家庭原因和自身学习状态,没有选择考研,大三结束之后的暑假,就开始找工作、投简历,但是悲惨的是,由于学历低,技术差(实际上啥技术没有,装jdk配环境变量这种都要考百度),投了几百家公司,一个回复的都没有,博主心灰意冷。意识到自己技术的不足,选择了去培训班,每晚学习到十一点才回住处休息。当然这里不是在打广告,说实话培训班其实特别坑,很多东西都不教,这也直接导致了博主第一份工作举步维艰。博主的第一份工作是在初创公司做开发,后端只有博主一个人,当时直接一个商城项目砸在自己手里。老板人也不是太差,没有直接开除博主,而是让博主降薪。博主毅然决然辞职,只身到外地重头做起,后来博主到了另外一家初创公司,辞职的时候老板有意加薪留我,还是为了追求更好,选择了拒绝。现在博主是第三家公司,总体来说都挺好,965几乎不加班。回头想想博主第一份工作虽然特别累,每天晚上加班到十点,但是确实学习到很多东西,开发、测试、运维什么都得自己做,也挺感激那时候的自己。现在博主的目标就是成长为一个微服务大佬,一年不行两年,两年不行五年,五年不行就十年,相信自己总有一天能够成为那样的人!!加油!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值