SpringCloud 集成分布式事务LCN


A. LCN的版本4.1.0只支持到spring boot 1.0 版本 (所以使用4.1.0版本这里要注意了,这里不做讲解)
B.LCN版本5.2.0 已经支持spring boot2.0以上版本
今天说下支持springcloud 2.0使用、先去官网下载最新5.0.2.RELEASE 源码
下载地址:https://github.com/codingapi/tx-lcn/releases
把它的源码包下载下来,解压后,把里面的txlcn-tm(这个是lcn的核心,即事务协调器)这个项目单独拿出来导入idea,并修改yml文件

server:port: 7970
spring:application:name: tx-managerprofiles: devdatasource:driver-class-name: com.mysql.jdbc.Driverpassword: 123456url: jdbc:mysql://192.168.13.64:3306/tx-manager?characterEncoding=UTF-8&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNullusername: rootjpa:hibernate:ddl-auto: update# redis配置redis:host: 192.168.13.64port: 6379#mybatis:
#  configuration:
#    map-underscore-to-camel-case: true
#    use-generated-keys: true#eureka配置
eureka:client:serviceUrl:defaultZone: http://192.168.13.64:5060/eureka/instance:instance-id: http://192.168.13.64:5060prefer-ip-address: true
logging:level:com:codingapi: debug#tx-manager 配置
tx-lcn:#client:# manager-address: 127.0.0.1:8070logger:driver-class-name: ${spring.datasource.driver-class-name}enabled: truejdbc-url: ${spring.datasource.url}password: ${spring.datasource.password}username: ${spring.datasource.username}manager:admin-key: 123456 #后台登陆密码  登陆页:http://127.0.0.1:7970/admin/index.htmlconcurrent-level: 128dtx-time: 10000ex-url-enabled: trueheart-time: 12000#tx-manager ip(client请求ip) 即:应用层连接的ip地址、用与连接事务协调器host: "" #这里部署到docker容器中特别注意,只能""或者0.0.0.0,不然识别不出来具体地址,在本地测试中可以写上本机的ip地址port: 8070message:netty:attr-delay-time: 10000#tm:
#  socket:
#    port: 8070

2.创建MySQL数据库, 名称为: 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;

3. 在各自的项目中pom文件中 引用LCN 5.2.0版本架包

<dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-tc</artifactId><version>5.0.2.RELEASE</version><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>*</artifactId></exclusion>####这里可能需要排除日志文件,防止冲突###</exclusions></dependency><dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-txmsg-netty</artifactId><version>5.0.2.RELEASE</version><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency>          

注意:有时候为了防止springboot的jar包冲突,需要将里面关于springboot的所有jar包排除掉。

4. 在各自的客户端A、B应用程序中的sprintg文件中添加调用上面tx-manager配置的客户端地址

  #配置连接tx-manager服务,这里的服务就是tx-manager客户端tx-lcn.manager.host地址tx-lcn:client:manager-address: 192.168.13.64:8070

上面的配置如果没有配置,系统默认是127.0.0.1:8080,就是默认大于配置,我后来项目全部注释了这个,所以取得源码里面默认地址, 也就是你的部署容器的地址、下面是客户端和服务端地址的默认值

5. 在服务A、B的启动类上添加注解@EnableDistributedTransaction启动分布式事务、在服务A中的需要分布式事务方法上面添加@LcnTransaction,服务B中添加@TxcTransaction或 @LcnTransaction注解。

6. 依次启动eureka注册中心,txlcn-tm,服务A、B

注意:这里遇到一个坑、在本地测试完了是OK的,看了它的源码里面默认ip地址127.0.0.1:8070 所以在部署到docker中应用链接不上tx-manager 中的8070端口地址,因为配置具体的地址 tx-lcn.manager.host=192.168.13.64,所以找不到这个,看了其他的网上参考,必须把这个设置为 “” 空双引号或者0.0.0.0下面是我的具体tx-manager项目中的配置文件信息(就是上面的配置)

本地测试成功:

14:34:17.883 default [http-nio-9091-exec-3] DEBUG c.c.t.tc.aspect.weave.DTXLogicWeaver - <---- TxLcn start ---->
14:34:17.884 default [http-nio-9091-exec-3] DEBUG c.c.t.t.c.c.DefaultGlobalContext - Start TxContext[5931a5f842537]
14:34:17.884 default [http-nio-9091-exec-3] DEBUG c.c.txlcn.tc.core.DTXServiceExecutor - pre business code, unit type: lcn @group(5931a5f842537)
14:34:17.886 default [http-nio-9091-exec-3] DEBUG c.c.t.t.a.weave.DTXResourceWeaver - proxy a sql connection: com.codingapi.txlcn.tc.core.transaction.lcn.resource.LcnConnectionProxy@e21d245.
14:34:18.938 default [nioEventLoopGroup-4-1] DEBUG c.c.t.t.netty.handler.RpcCmdDecoder - cmd->{"key":"982967939019400","msg":{"action":"heartCheck","state":100}}
14:34:18.942 default [http-nio-9091-exec-3] DEBUG c.c.txlcn.tc.core.DTXServiceExecutor - business success @group(5931a5f842537)
14:34:18.942 default [http-nio-9091-exec-3] DEBUG c.c.t.t.c.t.l.c.LcnRunningTransaction - join group: [GroupId: 5931a5f842537,Method: public void cn.bainuo.gene.project.service.impl.ProjectServiceImpl.testTxManager(java.lang.String)]
14:34:18.942 default [http-nio-9091-exec-3] DEBUG c.c.t.t.c.t.TransactionControlTemplate - join group > transaction type: lcn @group(5931a5f842537)
14:34:18.943 default [http-nio-9091-exec-3] DEBUG c.c.t.txmsg.netty.bean.SocketManager - get channel, key:/192.168.33.194:8070
14:34:18.943 default [http-nio-9091-exec-3] DEBUG c.c.t.txmsg.netty.bean.SocketManager - await response
14:34:18.943 default [nioEventLoopGroup-4-1] DEBUG c.c.t.t.netty.handler.RpcCmdEncoder - send->{"key":"5931ab0da66537","msg":{"action":"joinGroup","data":{"groupId":"5931a5f842537","transactionState":1,"unitId":"e12ee93bd3c9545ed0361ba2940d86db","unitType":"lcn"},"groupId":"5931a5f842537","state":100},"remoteKey":"/192.168.33.194:8070"}
14:34:18.951 default [nioEventLoopGroup-4-1] DEBUG c.c.t.t.netty.handler.RpcCmdDecoder - cmd->{"key":"5931ab0da66537","msg":{"action":"joinGroup","groupId":"5931a5f842537","state":200},"remoteKey":"/192.168.33.194:62065"}
14:34:18.951 default [nioEventLoopGroup-4-1] DEBUG c.c.t.t.netty.handler.RpcCmdDecoder - got response message[Netty Handler]
14:34:18.952 default [http-nio-9091-exec-3] DEBUG c.c.t.txmsg.netty.bean.NettyRpcCmd - got response. 5931ab0da66537
14:34:18.952 default [http-nio-9091-exec-3] DEBUG c.c.t.txmsg.netty.bean.SocketManager - response is: MessageDto(action=joinGroup, groupId=5931a5f842537, data=null, state=200)
14:34:18.952 default [http-nio-9091-exec-3] DEBUG c.c.t.t.netty.impl.NettyRpcClient - cmd request used time: 9 ms
14:34:18.952 default [http-nio-9091-exec-3] DEBUG c.c.txlcn.tc.txmsg.LoopMessenger - request action: joinGroup. TM[/192.168.33.194:8070]
14:34:18.952 default [http-nio-9091-exec-3] DEBUG c.c.t.t.c.t.TransactionControlTemplate - join group message over. @group(5931a5f842537)
14:34:18.952 default [http-nio-9091-exec-3] DEBUG c.c.t.t.c.checking.SimpleDTXChecking - start delay checking task @group(5931a5f842537)
14:34:18.953 default [http-nio-9091-exec-3] DEBUG c.c.t.t.c.t.TransactionControlTemplate - join group logic over @group(5931a5f842537)
14:34:18.953 default [http-nio-9091-exec-3] DEBUG c.c.t.t.c.c.DefaultGlobalContext - Destroy TxContext[5931a5f842537]
14:34:18.953 default [http-nio-9091-exec-3] DEBUG c.c.txlcn.tc.core.DTXLocalContext - clean thread local[DTXLocalContext]: DTXLocalContext(transactionType=lcn, groupId=5931a5f842537, unitId=e12ee93bd3c9545ed0361ba2940d86db, resource=null, destroy=true, inGroup=false, attachment=null, sysTransactionState=1, userTransactionState=-1, proxy=true, justNow=false, proxyTmp=false)
14:34:18.953 default [http-nio-9091-exec-3] DEBUG c.c.t.tc.aspect.weave.DTXLogicWeaver - <---- TxLcn end ---->
14:34:18.963 default [pool-2-thread-2] DEBUG c.c.t.t.c.a.AsyncH2DBAspectLogger - async save aspect log. result: true groupId: 5931a5f842537, used time: 10ms
14:34:19.060 default [nioEventLoopGroup-4-1] DEBUG c.c.t.t.netty.handler.RpcCmdDecoder - cmd->{"key":"5931ab36a4d537","msg":{"action":"notifyUnit","data":{"groupId":"5931a5f842537","state":1,"unitId":"e12ee93bd3c9545ed0361ba2940d86db","unitType":"lcn"},"groupId":"5931a5f842537","state":100},"remoteKey":"/192.168.33.194:62065"}
14:34:19.064 default [tc-rpc-service-0] DEBUG c.c.txlcn.tc.txmsg.ClientRpcAnswer - Receive Message: MessageDto(action=notifyUnit, groupId=5931a5f842537, data=NotifyUnitParams(groupId=5931a5f842537, unitId=e12ee93bd3c9545ed0361ba2940d86db, unitType=lcn, state=1), state=100)
14:34:19.066 default [tc-rpc-service-0] DEBUG com.codingapi.txlcn.txmsg.LCNCmdType - parsed txmsg cmd: notifyUnit
14:34:19.067 default [tc-rpc-service-0] DEBUG c.c.txlcn.tc.support.TxLcnBeanHelper - getRpcBeanName->rpc_lcn_notify-unit
14:34:19.067 default [tc-rpc-service-0] DEBUG c.c.t.t.c.t.TransactionCleanTemplate - clean transaction @group(5931a5f842537)
14:34:19.067 default [tc-rpc-service-0] DEBUG c.c.t.t.c.t.l.r.LcnConnectionProxy - commit transaction type[lcn] proxy connection:com.codingapi.txlcn.tc.core.transaction.lcn.resource.LcnConnectionProxy@e21d245.
14:34:19.071 default [tc-rpc-service-0] DEBUG c.c.t.t.c.t.l.r.LcnConnectionProxy - transaction type[lcn] proxy connection:com.codingapi.txlcn.tc.core.transaction.lcn.resource.LcnConnectionProxy@e21d245 closed.
14:34:19.071 default [tc-rpc-service-0] DEBUG c.c.t.t.c.checking.SimpleDTXChecking - cancel 5931a5f842537:e12ee93bd3c9545ed0361ba2940d86db checking. @group(5931a5f842537)
14:34:19.071 default [tc-rpc-service-0] DEBUG c.c.t.t.c.t.TransactionCleanTemplate - clean transaction over @group(5931a5f842537)
14:34:19.072 default [nioEventLoopGroup-4-1] DEBUG c.c.t.t.netty.handler.RpcCmdEncoder - send->{"key":"5931ab36a4d537","msg":{"action":"notifyUnit","data":true,"state":200},"remoteKey":"/192.168.33.194:8070"}
14:34:19.074 default [pool-2-thread-3] DEBUG c.c.t.t.c.a.AsyncH2DBAspectLogger - async clear aspect log. result:true, groupId: 5931a5f842537, used time: 2ms
14:34:31.074 default [nioEventLoopGroup-4-1] DEBUG c.c.t.t.netty.handler.RpcCmdDecoder - cmd->{"key":"982967939019400","msg":{"action":"heartCheck","state":100}}
14:34:43.080 default [nioEventLoopGroup-4-1] DEBUG c.c.t.t.netty.handler.RpcCmdDecoder - cmd->{"key":"982967939019400","msg":{"action":"heartCheck","state":100}}
14:34:55.085 default [nioEventLoopGroup-4-1] DEBUG c.c.t.t.netty.handler.RpcCmdDecoder - cmd->{"key":"982967939019400","msg":{"action":"heartCheck","state":100}}

https://www.cnblogs.com/cq-yangzhou/p/11453257.html

SpringCloud2.0 集成分布式事务管理 LCN相关推荐

  1. 分布式事务管理原理 TCC和LCN 分布式详解

    最近笔者在面试过程中发现,分布式的微服务开发越来越广泛了,越来越多的企业在面试时都需要有微服务的经验,那么在谈到微服务的过程中,很多的面试官都会问到一个问题:有没有接触过分布式事务管理?怎么实现分布式 ...

  2. spring cloud alibaba + tx-lcn 实现微服务的分布式事务管理

    Spring Cloud Alibaba官方文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md Sp ...

  3. spring事务隔离级别、传播行为以及spring+mybatis+atomikos实现分布式事务管理

    1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...

  4. 解读金融高频交易不出错的金手指:分布式事务管理

    本文分享自华为云社区<华为云分布式事务管理DTM:6大特性解决云上微服数据一致性>,原文作者:灰灰哒. 云原生2.0时代,微服务架构下如何保证数据的一致性是非常重要的一个课题.4月8日,在 ...

  5. SpringBoot+Nacos+Seata实现Dubbo分布式事务管理

    SpringBoot+Nacos+Seata实现Dubbo分布式事务管理 https://www.shangmayuan.com/a/a3ba056126ba45db9b8dfd5b.html 源码下 ...

  6. SpringBoot+Zookeeper+Seata实现Dubbo分布式事务管理

    面我已经写过一篇SpringBoot+Nacos+Seata实现Dubbo分布式事务管理的文章,今天为什么还要写这篇呢,是因为好多公司还在用Zookeeper作为Dubbo的注册中心和配置中心在大规模 ...

  7. 事务 | Spring Cloud 分布式事务管理(二)2pc/3pc

    Spring Cloud 分布式事务管理(二)2pc/3pc 上一篇 Spring Cloud 分布式事务管理 上一章,讲到了微服务带来的优点和缺点以及分布式事务的不确定性.这节说一下2pc/3pc ...

  8. 老板,明年我用Seata搞定分布式事务管理的规范化建设 | 中篇

    辞旧迎新,22年要结束了,明年做什么想好了嘛?要不要用 Seata 搞定公司分布式事务管理的规范化建设? 欢迎关注微信公众号「架构染色」交流和学习 一.背景 在上一篇<明年用Seata搞定分布式 ...

  9. Spring-Boot + Atomikos 实现跨库的分布式事务管理

    一.何为事务 定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作成功,要么都不成功. 其必须遵循的四个原则(ACID): 原子性(Atomicity -- 美 [ˌætəˈ ...

  10. 分布式事务管理Atomikos

    目录 XA协议 Atomikos介绍 atomikos_demo Spring对分布式事务的支持 基于spring实现 事务执行流程 XA协议 用于支持单个服务操作多个服务源,XA是由X/Open组织 ...

最新文章

  1. hdu 1561 The more, The Better 树形dp
  2. java继承与多态性_Java继承与多态浅析
  3. django-模板语言-传输各种数据类型
  4. 力扣 买卖股票的最佳时机II
  5. 【WiFi密码破解详细图文教程】ZOL仅此一份 详细介绍从CDlinux U盘启动到设置扫描破解-破解软件论坛-ZOL中关村在线...
  6. Echarts地图高亮循环数据展示
  7. UEFI开发与调试---运行阶段介绍
  8. 简单综合案例的统计学方法(总结试验性定量数据分析)
  9. Android手机获取外网ip(by 星空武哥)
  10. 贝塞尔曲线 PH曲线 C曲线 B样条 NURBS样条曲线 三次Cardinal样条曲线对比 也涉及到不同曲线加速度的一些东西,不过有待细化
  11. Android App 冷启动优化方案--黑白屏
  12. 中南民大 通原复习ch3之随机过程
  13. 利用setTimeout实现setInterval
  14. DataSheet查询网站
  15. Windows系统安装搭建ios开发环境
  16. 有哪门语言是所有优秀程序员都应该无差别掌握的?
  17. 基于知识蒸馏的心律失常分类模型
  18. 关于WMV DRM的移除
  19. 51单片机最小组成系统电路图[1080p高清]
  20. 使用邻接表输出所有拓扑序列(新手必看!通俗易懂!绝对详细!!)

热门文章

  1. Mac的邮件客户端使用--登录GMail邮箱和QQ邮箱的解决方案
  2. 单片机蓝桥杯——超声波测距
  3. 开源软件的法律风险及防控
  4. 怎么样才能查看别人的IP地址
  5. 谈谈我在创业公司的感悟
  6. tplink软件升级有用吗_新版tplink路由器固件升级_tplink软件升级方法-192路由网
  7. java在pdf文件中插入字_怎么在PDF文件中添加文字文本框
  8. 抽象与具体,形而上者谓之道,形而下者谓之器
  9. deepin linux连接不上网络,把Deepin升级到15.8桌面版后无线上不了网的解决方法
  10. 无线网络共享有线计算机,win10怎么把有线网络变成无线_win10如何共享有线网络为无线热点...