принцип:
创建一个事务管理组Tm项目。
LCN把事务注册到Tm中。然后结束后一起提交事务。
TCC先把事务提交。然后错误后进入cl方法中对数据进行修改。
只是简单的使用整理。要深入了解请看官方文档。
Документация:
源码地址:https://github.com/codingapi/tx-lcn
中文文档:http://www.txlcn.org/zh-cn/docs/preface.html
шаг:
1.创建tx-manage数据库和表
2.创建Tm项目。修改配置。
3.启动tm项目,并查看是否成功
4.使用tc并注册到Tm
5.使用@LcnTransaction模式
6.使用@TccTransaction模式
1. Создайте базу данных и таблицы для управления транзакцией.
创建数据库和表名
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;
2. Создайте ТМ-проект
1. Добавьте зависимости
<!--mysql连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!--分布式事务管理tm-->
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-tm</artifactId>
<version>${codingapi.txlcn.version}</version>
</dependency>
2. Класс запуска. Добавьте аннотацию @enableTransactionManagerServer.
3. Измените файл конфигурации Tm.
server:
port: 7970
spring:
application:
name: tx-manager
datasource:
# mysql数据源
driver-class-name: com.mysql.jdbc.Driver
password: 123456
url: jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8
username: root
redis:
# redis数据源 改成自己的。
database: 28
host:
password:
port:
tx-lcn:
manager:
# 登录密码
admin-key: 123456
# 详情可看 http://www.txlcn.org/zh-cn/docs/setting/manager.html
4. Общий проект ТМ
3. Запустите проект и просмотрите
1. Введите http://localhost:7970/admin/index.html#/login.
2. По значению admin-ключа в конфигурационном файле. авторизоваться
4. Используйте tc и зарегистрируйтесь в Tm
1. Добавляем зависимости (про микросервисы и Mybatis говорить не будем)
<!--tc-->
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-tc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--tc与tm通讯-->
<dependency>
<groupId>com.codingapi.txlcn</groupId>
<artifactId>txlcn-txmsg-netty</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
2. Добавьте аннотацию @EnableDistributedTransaction в класс запуска.
3. В конфигурационный файл записывается адрес проекта Tm.
#Tm项目地址。 默认是127.0.0.1:8070,如果再服务器上的话要改成对应的地址。
#8070是Tm默认的监听端口,需要更改的话去看TM的配置文件信息,TM监听Socket端口. tx-lcn.manager.port=8070。默认是Tm的启动端口+100。虽然文档写的是-100.实际上是+100
tx-lcn:
client:
manager-address: 127.0.0.1:8070
4. Запустите проект. Проверьте, зарегистрирован ли он в Tm.
5. Повторите шаги 1–3, чтобы запустить другую службу.
5. Используйте шаблон @LcnTransaction
1. Добавьте аннотацию @LcnTransaction как к методам потребителя, так и к методам поставщика.
流程: A: 插入数据a -> B: 插入数据b -> A: 是否抛出异常
抛出异常:事务不提交。无数据
不抛出异常:事务提交。有两条数据
2. Затем протестируйте. Без параметра ex. Проект прошел успешно. и вставил два данных
3. Привести бывшие параметры. Элемент выдает исключение. Затем посмотрите, зафиксированы ли данные (откатились). Выяснилось, что данные не изменились. Указывает, что режим распределенной транзакции Lcn успешно используется.
6. Используйте шаблон @LcnTransaction
1. Процесс и логика остаются неизменными. Замените @LcnTransaction в проекте b на аннотацию @TccTransaction.
2. Вы можете разбить точку после вставки данных в проект B. Затем посмотрите базу данных. Вставляются ли данные.
3. Завершите программу. Проверьте, нужно ли вводить методы cf и cl.