LCN 5.0.2.RELEASE分布式事务框 最新最详细的架配置使用教程

目录

【lcn理论网上到处都是,在此不再累述】

【LCN5.0.2 版本已经发布了,但是其安装部署总是有诸多问题,经过测试部署整理了这份教程,就详细讲述如何部署,以springcloud整合为例】

请尊重原创,转载请标明出处。。。。。。

2 LCN 5.x使用

2.1配置TM (5.0.2)

2.1.1操作前准备

2.1.2下载源码包:

2.1.3解压如下:

2.1.4将源码导入MyEclipse:

2.1.5可能存在问题:

2.1.6解决:

2.1.7重启后仍无效,则删除项目,重新导入即可。

2.1.8配置配置文件

2.1.9项目启动

2.1.10 访问:http://localhost:7970

2.2从源码编译打包为jar

2.2配置TC

2.2.1TC引入pom依赖

2.2.2TC开启分布式事务注解

2.2.3TC微服务A业务方法配置

2.2.5TC配置信息说明


2 LCN 5.x使用

2.1配置TM (5.0.2)

2.1.1操作前准备

需要redis  和 mysql(创建好表格)

运行TM之前要先启动redis和mysql。

sql表格

/*
 Navicat Premium Data Transfer

 Source Server         : local
 Source Server Type    : MySQL
 Source Server Version : 100309
 Source Host           : localhost:3306
 Source Schema         : tx-manager

 Target Server Type    : MySQL
 Target Server Version : 100309
 File Encoding         : 65001

 Date: 29/12/2018 18:35:59
*/
CREATE DATABASE IF NOT EXISTS  `tx-manager` DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
USE `tx-manager`;

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_tx_exception
-- ----------------------------
DROP TABLE IF EXISTS `t_tx_exception`;
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,
  `ex_state` tinyint(4) NULL DEFAULT NULL COMMENT '0 待处理 1已处理',
  `remark` varchar(10240) NULL DEFAULT NULL COMMENT '备注',
  `create_time` datetime(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 967 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

2.1.2下载源码包:

https://github.com/codingapi/tx-lcn/releases

2.1.3解压如下:

 

2.1.4将源码导入MyEclipse:

2.1.5可能存在问题:

源码中大量的log无法通过@Slf4j注解找到log变量,而且大量的set/get方法注解也都失效了。

2.1.6解决:

1 下载lombok.jar 

https://projectlombok.org/download.html

2. 将 lombok.jar 复制到 myeclipse.ini 所在的文件夹目录下
3. 打开 myeclipse.ini,在最后面插入以下两行并保存:
    -Xbootclasspath/a:lombok.jar
     -javaagent:lombok.jar     
4.重启  myeclipse

2.1.7重启后仍无效,则删除项目,重新导入即可。

2.1.8配置配置文件

 

2.1.8.1基本内容:

spring.application.name=TransactionManager
server.port=7970
#数据库配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=xxxx
#方言配置
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=update
#Redis配置
spring.redis.host=192.168.153.136
spring.redis.port=6379
spring.redis.password=

2.1.8.2官方示例:

spring.application.name=TransactionManager
server.port=7970

# JDBC 数据库配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456

# 数据库方言
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

# 第一次运行可以设置为: create, 为TM创建持久化数据库表
spring.jpa.hibernate.ddl-auto=validate

# TM监听IP. 默认为 127.0.0.1
tx-lcn.manager.host=127.0.0.1

# TM监听Socket端口. 默认为 ${server.port} - 100
tx-lcn.manager.port=8070

# 心跳检测时间(ms). 默认为 300000
tx-lcn.manager.heart-time=300000

# 分布式事务执行总时间(ms). 默认为36000
tx-lcn.manager.dtx-time=8000

# 参数延迟删除时间单位ms  默认为dtx-time值
tx-lcn.message.netty.attr-delay-time=${tx-lcn.manager.dtx-time}

# 事务处理并发等级. 默认为机器逻辑核心数5倍
tx-lcn.manager.concurrent-level=160

# TM后台登陆密码,默认值为codingapi
tx-lcn.manager.admin-key=codingapi

# 分布式事务锁超时时间 默认为-1,当-1时会用tx-lcn.manager.dtx-time的时间
tx-lcn.manager.dtx-lock-time=${tx-lcn.manager.dtx-time}

# 雪花算法的sequence位长度,默认为12位.
tx-lcn.manager.seq-len=12

# 异常回调开关。开启时请制定ex-url
tx-lcn.manager.ex-url-enabled=false

# 事务异常通知(任何http协议地址。未指定协议时,为TM提供内置功能接口)。默认是邮件通知
tx-lcn.manager.ex-url=/provider/email-to/***@**.com



注意(NOTE)
(1) TxManager所有配置均有默认配置,请按需覆盖默认配置。
(2) 特别注意 TxManager进程会监听两个端口号,一个为TxManager端口,另一个是事务消息端口。TxClient默认连接事务消息端口是8070, 所以,为保证TX-LCN基于默认配置运行良好,请设置TxManager端口号为8069 或者指定事务消息端口为8070
(3) 分布式事务执行总时间 a 与 TxClient通讯最大等待时间 b、TxManager通讯最大等待时间 c、微服务间通讯时间 d、微服务调用链长度 e 几个时间存在着依赖关系。 a >= 2c + (b + c + d) * (e - 1), 特别地,b、c、d 一致时,a >= (3e-1)b。你也可以在此理论上适当在减小a的值,发生异常时能更快得到自动补偿,即 a >= (3e-1)b - Δ(原因)。 最后,调用链小于等于3时,将基于默认配置运行良好
(4) 若用tx-lcn.manager.ex-url=/provider/email-to/xxx@xx.xxx 这个配置,配置管理员邮箱信息(如QQ邮箱):
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=xxxxx@**.com

2.1.9项目启动

2.1.10 访问:http://localhost:7970

初始密码:codingapi

如下成功

2.2从源码编译打包为jar

1 解压获取到的源码包,并成功导入到myeclipse中。

2 进入 txlcn-tm项目中,修改pom.xml 的打包插件:

3 解开这个注解,并注释掉docker的那个插件(图片中未显示出来,初始时事那个)。

4 不要单独打包这个项目,容易出现bug,直接右键tx-lcn-5.0.2.RELEASE,对整个源码包进行打包。

5 右键tx-lcn 选则:

6 输入任务代码 : clean  install

7 同时勾选跳过测试test,点击运行即可(可能需要等待一段时间)

8 打包结束后,在txlcn-tm的target下会多出来几个文件,其中txlcn-tm-5.0.2.zip就是我们需要的文件,她包含了TM的单独项目源码,jar包和源码jar包,三个部分。jar包可直接运行。(运行前先启动reids和mysql)

2.2配置TC

2.2.1TC引入pom依赖

注意:不能直接引用Maven仓库中的依赖,目前仓库中的5.0.2版本依赖有bug。

导致DataSourceAspect 创建bean的name冲突。

所以要直接引用5.0.2 源码包中的下面两个依赖。(将上述打包好的jar包,放入本地仓库就行了)

 <dependency>
            <groupId>com.codingapi.txlcn</groupId>
            <artifactId>txlcn-tc</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.codingapi.txlcn</groupId>
            <artifactId>txlcn-txmsg-netty</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

2.2.2TC开启分布式事务注解

在主类上使用@EnableDistributedTransaction

@SpringBootApplication
@EnableDistributedTransaction
public class DemoAApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoDubboClientApplication.class, args);
    }

}

2.2.3TC微服务A业务方法配置

@Service
public class ClientA {
    
    @Autowired
    private ValueDao valueDao; //本地db操作
    
    @Autowired
    private ClientB clientB;//远程B模块业务
    
    @LcnTransaction //分布式事务注解
    @Transactional //本地事务注解
    public String execute(String value) throws BusinessException {
        // step1. call remote service B
        String result = clientB.rpc(value);  // (1)
        // step2. local store operate. DTX commit if save success, rollback if not.
        valueDao.save(value);  // (2)
        valueDao.saveBackup(value);  // (3)
        return result + " > " + "ok-A";
    }
}

2.2.4TC微服务B业务方法配置

@Service
public class ClientB {
    
    @Autowired
    private ValueDao valueDao; //本地db操作
    
    @LcnTransaction //分布式事务注解
    @Transactional  //本地事务注解
    public String rpc(String value) throws BusinessException {
        valueDao.save(value);  // (4)
        valueDao.saveBackup(value);  // (5)
        return "ok-B";
    }
}

2.2.5TC配置信息说明

tx-lcn.client.manager-address=127.0.0.1:8070 

打包好的TM包:       https://download.csdn.net/download/weixin_42629535/11033690

打包好的TC依赖:    https://download.csdn.net/download/weixin_42629535/11033548

请尊重原创,转载请标明出处。。。。。。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
TCC-Transaction是一个开源的TCC补偿性分布式事务TCC是Try、Confirm、Cancel的缩写,表示事务的尝试、确认和取消阶段。TCC能够对分布式事务中的各个资源进行分别锁定、提交和释放。它的优点是能够实现严格一致性并且具有较短的执行时间和高实时性要求。同时,TCC也具有一定的缺点,例如对应用的侵入性较强,需要实现每个分支的try、confirm和cancel操作,实现难度较大。 关于Spring Cloud分布式事务TCC,可以使用TCC-Transaction来实现。TCC-Transaction可以作为可靠性事件投递的替代品,并作为Spring Cloud Stream或Spring Cloud Bus的基础组件。此外,TCC还需要在事务管理器(协调器)节点上以高可用集群方式部署,并使用多数派算法来避免集群发生脑裂问题。 在实际应用中,TCC适用于一些需要严格一致性、执行时间短和实时性要求高的场景,例如红包和收付款业务。 更多关于TCC-Transaction详细信息可以在其GitHub地址(https://github.com/changmingxie/tcc-transaction)和项目指南地址(https://github.com/changmingxie/tcc-transaction/wiki/使用指南1.2.x)中找到。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SpringCloud(6) 分布式事务【概念、常见选择 - tx-lcn】](https://blog.csdn.net/qq_38225558/article/details/86103229)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Spring Cloud综合实战 - 基于TCC补偿模式的分布式事务](https://blog.csdn.net/Solarison/article/details/68061157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值