当前位置: 首页 > news >正文

tx-lcn使用

tx-lcn是啥

tx-lcn是一个分布式事务框架,有两个模块组成管理端(server)和client端。
管理端用于分布式事务的注册,事务消息接收,事务消息下发等管理工作。
client端包括事务发起方,事务参与方。
LCN名称是各取如下单词首字母得来的:锁定事务单元(lock)、确认事务模块状态(confirm)、通知事务(notify) 。
分布式事务的本质是多个数据库事务的统一管理。

分布式数据事务多采用二阶段提交协议
阶段一为准备(prepare)阶段。即所有的参与者准备执行事务并锁住需要的资源。参与者ready时,向transaction manager报告已准备就绪。
阶段二为提交阶段(commit)。当transaction manager确认所有参与者都ready后,向所有参与者发送commit命令。

tx-lcn的模式

一、lcn模式:通过代理数据库连接来实现分布式事务的统一管理,适合于mysql等关系型数据库,使用注解即可,所以对代码侵入性较小。由于使用数据库本身的事务机制,对数据的一致性有较高保证。但是由于代理链接跟发起方链接一起释放,连接占用时间较长。

遵循二阶段提交,执行流程如下描述:
1、事务发起方(client端)调用管理端创建事务组,生成一个事务组。
2、事务发起方调用事务参与方执行业务逻辑,然后事务参与方将执行结果通知给事务管理端。
3、事务发起方将自己模块的执行结果通知给管理端。
4、管理端根据发起方和所有参与方的执行结果通知发起方和所有参与方是提交还是回滚。

二、tcc模式:不依赖于数据库的事务实现分布式事务管理。也不需要事务管理端,而是由代码逻辑控制事物的提交和回滚。为需要使用分布式事物的方发编写确认提交逻辑和回滚逻辑,使用注解参数指定例如:@TccTransaction(confirmMethod=“method1”,cancelMethod=“method2”)。由于每个事务方法都要写这两个逻辑,比较繁琐,对代码侵入性较强,但适用面广,任何数据库都适用。

三、txc模式:执行sql前,先查询影响的数据,然后保存这些数据,并对这些数据加锁,执行SQL,如果执行失败,则用保存的数据回滚。目前分布式锁采用redis的分布式锁

tx-lcn的使用

一、lcn模式:

创建一个管理项目

  • pom文件引入依赖
<dependencies><dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-tm</artifactId><version>5.0.2.RELEASE</version></dependency>
</dependencies>
  • 使用application.properties配置属性,或者保留空的application.properties文件新建一个application.yml文件在其中配置属性:
spring:redis:host: 127.0.0.1port: 6381application:name: txManagerdatasource:driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/tx-manager?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiusername: rootpassword: root
tx-lcn:manager:host: 127.0.0.1 # tx-manager ip(client请求ip)port: 8070  # client 请求端口heart-time: 12000 # 心跳检测时间 单位:msdtx-time: 3000 # 事务执行总时间admin-key: 123456 #TM后台登陆密码,默认密码是codingapilogger:enabled: true #开启日志,默认为false,开发阶段最好开启日志,并设置为debug等级,这样方便追踪排查问题#日志记录表 t_loggerdriver-class-name: ${spring.datasource.driver-class-name}jdbc-url: ${spring.datasource.url}username: ${spring.datasource.username}password: ${spring.datasource.password}
  • 从引入的jar包中找到tx-manager.sql,用它创建管理端需要的数据库表
  • 启动类上加注解@EnableTransactionManagerServer

创建一个业务项目

  • pom文件引入依赖
<dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-txmsg-netty</artifactId><version>5.0.2.RELEASE</version>
</dependency>
<dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-tc</artifactId><version>5.0.2.RELEASE</version>
</dependency>
  • yml配置
tx-lcn:client:manager-address: 127.0.0.1:8070 #上述管理端的IP
  • 启动类上加注解@EnableDistributedTransaction
    在需要使用分布式事务的方法上加注解@LcnTransaction
    @LcnTransaction属性propagation可取值
    DTXPropagation.REQUIRED:默认值,表示如果当前没有事务组创建事务组,如果有事务组,加入事务组。多用在事务发起方。
    DTXPropagation.SUPPORTS:如果当前没有事务组以本地事务运行,如果当前有事务组加入事务组。多用在事务参与方法。

二、tcc模式:

创建一个业务项目

  • pom文件引入依赖
<dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-txmsg-netty</artifactId><version>5.0.2.RELEASE</version>
</dependency>
<dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-tc</artifactId><version>5.0.2.RELEASE</version>
</dependency>
  • 启动类上加注解@EnableDistributedTransaction
  • 在需要使用分布式事务的方法上加注解@TccTransaction(confirmMethod=“confirmMethod”,cancelMethod=“cancelMethod”)
  • 为方法创建confirmMethod和cancelMethod方法
    参考文章:
    https://blog.csdn.net/m0_56182317/article/details/130288633
    https://www.cnblogs.com/64Byte/p/13426818.html
    https://www.bilibili.com/read/cv10537863/
    https://zhuanlan.zhihu.com/p/325602044?utm_id=0

相关文章:

tx-lcn使用

tx-lcn是啥 tx-lcn是一个分布式事务框架&#xff0c;有两个模块组成管理端&#xff08;server&#xff09;和client端。 管理端用于分布式事务的注册&#xff0c;事务消息接收&#xff0c;事务消息下发等管理工作。 client端包括事务发起方&#xff0c;事务参与方。 LCN名称是…...

oracle恢复异常处理

问题现象&#xff1a; RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 18> 19> 20> 21> 22> 23> 24> using target database control file instead of recovery catalog allocate…...

谈谈什么是 Redis

&#x1f525;博客主页&#xff1a;fly in the sky - CSDN博客 &#x1f680;欢迎各位&#xff1a;点赞&#x1f44d;收藏⭐️留言✍️&#x1f680; &#x1f386;慢品人间烟火色,闲观万事岁月长&#x1f386; &#x1f4d6;希望我写的博客对你有所帮助,如有不足,请指正&#…...

备战蓝桥杯(java)(日益更新)

备战蓝桥杯&#xff08;java&#xff09;&#xff08;日益更新&#xff09; 文章目录 备战蓝桥杯&#xff08;java&#xff09;&#xff08;日益更新&#xff09;前言&#xff1a;一、c 到 java 须要注意的地方&#xff1a;二、多练java代码&#xff1a;&#xff08;用java代码…...

06 Php学习:字符串

PHP 中的字符串变量 在 PHP 中&#xff0c;字符串是一种常见的数据类型&#xff0c;用于存储文本数据。字符串变量可以包含字母、数字、符号等字符&#xff0c;并且可以进行各种操作和处理。以下是关于 PHP 中字符串变量的一些重要信息&#xff1a; 定义字符串变量&#xff1…...

python画图Matplotlib和Seaborn

python画图Matplotlib和Season 一、Matplotlib1、介绍2、安装3、内容二、Seaborn1、介绍2、安装3、内容一、Matplotlib Matplotlib官网 1、介绍 Matplotlib 是一个 Python 的绘图库,用于创建高质量的二维图表和一些基本的三维图表。它广泛应用于科学计算、数据分析、工程学和…...

一体式I/O模块与RS485串口联动,实现工业网络无缝对接

在现代工业自动化领域中&#xff0c;一体化I/O模块和RS485串口的联动应用已经成为实现工业设备高效、稳定通信的关键技术手段之一。这种联动机制能够有效地将各种现场设备的数据实时、准确地传输到上位机系统&#xff0c;从而实现工业网络的无缝对接。 一体化I/O模块&#xff…...

如何在Uniapp真机中使用H.265无插件流媒体播放器EasyPlayer

流媒体播放器EasyPlayer是TSINGSEE青犀流媒体组件系列中关注度较高的产品&#xff0c;经过多年的发展和迭代&#xff0c;目前已经有多个应用版本&#xff0c;包括RTSP版、RTMP版、Pro版&#xff0c;以及js版&#xff0c;其中js版本作为网页播放器&#xff0c;受到了用户的广泛使…...

【MySQL数据库 | 第二十五篇】深入探讨MVCC底层原理

前言&#xff1a; 在当今互联网时代&#xff0c;数据库扮演着数据存储和管理的关键角色。对于大型Web应用程序和企业级系统而言&#xff0c;高效地处理并发访问和事务管理是至关重要的。多版本并发控制&#xff08;MVCC&#xff09;是一种数据库事务处理的技术&#xff0c;旨…...

【LAMMPS学习】八、基础知识(1.6) LAMMPS 与其他代码耦合

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…...

ArrayList中多线程的不安全问题

ArrayList中的不安全问题 正常的输出 List<String> list Arrays.asList("1","2","3"); list.forEach(System.out::println);为什么可以这样输出&#xff0c;是一种函数是接口&#xff0c;我们先过个耳熟 Arrys.asList是返回一个ArrayL…...

ALTER TABLE 之 定点变更(in-place alter)

定点变更算法可以提供优于慢速变更算法的诸多性能优势&#xff1a; 定点变更算法&#xff1a; 1&#xff0c;增加了表的可用性 ALTER TABLE操作使用定点变更算法时&#xff0c;其他用户稍后可以访问该表&#xff0c;因为数据库服务器只在更新表定义和重建包含更改列的索引时才锁…...

【RAG实践】Rerank,让大模型 RAG 更近一步

RAGRerank原理 上一篇【RAG实践】基于LlamaIndex和Qwen1.5搭建基于本地知识库的问答机器人 我们介绍了什么是RAG&#xff0c;以及如何基于LLaMaIndex和Qwen1.5搭建基于本地知识库的问答机器人&#xff0c;原理图和步骤如下&#xff1a; 这里面主要包括包括三个基本步骤&#…...

私有化客服系统:在线客服搭建与部署的创新之路

随着互联网技术的飞速发展&#xff0c;企业与客户之间的沟通方式也在不断地演变。在这个信息爆炸的时代&#xff0c;一个高效、便捷、智能的在线客服系统成为了企业提升服务质量、增强客户满意度的重要工具。本文将详细介绍在线客服系统的构建、部署以及私有化客服的优势&#…...

VM-UNet: Vision Mamba UNet for Medical Image Segmentation

VM-UNet: Vision Mamba UNet for Medical Image Segmentation VM-UNet&#xff1a;基于视觉Mamba UNet架构的医学图像分割 论文链接&#xff1a;http://arxiv.org/abs/2402.02491 代码链接&#xff1a;https://github.com/JCruan519/VM-UNet 1、摘要 文中利用状态空间模型SS…...

面向对象编程:在Python中的面向对象编程奥秘

面向对象编程在Python中的奥秘 在编程的世界里&#xff0c;面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种非常重要的编程范式。它改变了我们思考问题和设计代码的方式。Python作为一种支持面向对象的语言&#xff0c;为我们提供…...

考研数学|零基础100分保底复习方案+资料分享

目标100分其实很好实现&#xff0c;只要你有决心&#xff0c;不需要去看任何人的学习技巧 其实基础差&#xff0c;你只要专攻基础就好了&#xff0c;现在的很多考研课程和资料真的很不照顾基础不好的同学&#xff0c;好像就默认你什么都会一样&#xff0c;但是还是有对于基础差…...

【MATLAB源码-第29期】基于matlab的MIMO,MISO,SIMO,SISO瑞利rayleigh信道容量对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. SISO&#xff08;单输入单输出&#xff09;&#xff1a; - SISO 是指在通信系统中&#xff0c;只有一个天线用于传输信号&#xff0c;也只有一个天线用于接收信号的情况。这是最简单的通信方式。 2. SIMO&#xff08;单…...

JRT高效率开发

得益于前期的基础投入&#xff0c;借助代码生成的加持&#xff0c;本来计划用一周实现质控物维护界面&#xff0c;实际用来四小时左右完成质控物维护主体&#xff0c;效率大大超过预期。 JRT从设计之初就是为了证明Spring打包模式不适合软件服务模式&#xff0c;觉得Spring打包…...

Spring Boot 切面的一种的测试方法,java中级开发面试

void afterReturnName() { Assertions.assertEquals(studentController.getNameById(123L).getName(), "测试姓名Yz");} } 但往往切面中的逻辑并非这么简单&#xff0c;在实际的测试中其实我们也完成没有必要关心在切面中到底发生了什么&#xff08;发生了什么应该在…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...