SpringBoot-Dubbo 使用LCN-分布式事务管理

嵌入式状态机编程-QP状态机框架与常见状态机方法 状态机基本术语 现态:是指当前所处的状态。 条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。 传统有限状态机Fsm实现方法 如图,是一个定时计数器,计数器存在两种状态,一种为设置状态,一种为计时状态 设 阅读详情

LCN分布式事务管理

    官方地址: http://www.txlcn.org/

 

 

下载工具

首先,你可以参考官网,官网有更详细的讲解:https://github.com/codingapi/tx-lcn

如果想使用整理好的包,可以从这下载, 按照配置说明配置便可. https://download.youkuaiyun.com/download/coder_arley/10710659

 

配置解析

参考官网配置,这里做出解释:

在LcnConfg.java中,我们添加了如下注解:

@Configuration
@EnableTransactionManagement(proxyTargetClass=true)
@ComponentScan(basePackages={"com.codingapi.tx.*","com.iking.provider.*"})
@ImportResource(locations = {"classpath*:dubbo_provider.xml"})
public class LcnConfig implements TxManagerTxUrlService{

    @Autowired
    private Environment env;

    /**
     * 获取代理连接池
     * @return
     */
    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(env.getProperty("spring.datasource.url"));
        dataSource.setUsername(env.getProperty("spring.datasource.username"));
        dataSource.setPassword(env.getProperty("spring.datasource.password"));
        return dataSource;
    }

    /**
     * 注入LCN的代理连接池
     * @return
     */
    @Bean("transactionManager")
    public PlatformTransactionManager txManager(){
        return new DataSourceTransactionManager(dataSource());
    }

    @Override
    public String getTxUrl() {
        return env.getProperty("tx.manager.url");
    }

}

1)首先呢,我们将此类标注为全局配置类,使用@Configuration
2)我们使用@EnableTransactionManagement(proxyTargetClass=true)开启事务远程代理,并进行连接池和LCN代理的注入:

@Autowired
private Environment env;

/**
 * 获取代理连接池
 * @return
 */
@Bean
public DataSource dataSource() {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl(env.getProperty("spring.datasource.url"));
    dataSource.setUsername(env.getProperty("spring.datasource.username"));
    dataSource.setPassword(env.getProperty("spring.datasource.password"));
    return dataSource;
}

/**
 * 注入LCN的代理连接池
 * @return
 */
@Bean("transactionManager")
public PlatformTransactionManager txManager(){
    return new DataSourceTransactionManager(dataSource());
}

 

这个注解等同于官网上xml中的下列代码:

    <!--lcn代理连接池配置-->
<bean name="lcnDataSourceProxy" class="com.lorne.tx.db.LCNDataSourceProxy">
    <property name="dataSource" ref="dataSource"/>
      <!-- 分布式事务参与的最大连接数,确保不要超过普通连接池的最大值即可 -->
    <property name="maxCount" value="20"/>
</bean>


<!--jdbcTemplate -->
<bean id="jdbcTemplate"
      class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource">
        <ref bean="lcnDataSourceProxy"/>
    </property>
</bean>

<!--jdbc事务配置 -->
<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="lcnDataSourceProxy" />
</bean>

还有

<tx:annotation-driven/>

<!-- Aspect -->
<aop:aspectj-autoproxy expose-proxy="true" proxy-target-class="true"/>

使用说明

    分布式事务发起方:

    @Override
    @TxTransaction(isStart=true)
    @Transactional
    public boolean hello() {
        //本地调用
        testDao.save();
        //远程调用方
        boolean res =  test2Service.test();
        //模拟异常
        int v = 100/0;
        return true;
    }
    

分布式事务被调用方(test2Service的业务实现类)

    @Override
    @Transactional
    @TxTransaction
    public boolean test() {
        //本地调用
        testDao.save();
        return true;
    }

说明:在使用LCN分布式事务时,只需要将事务的开始方法添加@TxTransaction(isStart=true)注解即可,在参与方添加@TxTransaction或者实现ITxTransaction接口即可。详细见demo教程

关于@TxTransaction 使用说明

@TxTransaction注解是分布式事务的标示。

若存在业务方法:a->b b->c b->d,那么开启分布式事务注解的话,需要在各个模块方法上添加@TxTransaction即可。

    @TxTransaction(isStart=true)
    @Transactional
    public void a(){
        b();
    }
    
    @TxTransaction
    public void b(){
        c();
        d();
    }
    
    @TxTransaction
    public void c(){}
    
    @TxTransaction
    public void d(){}
动态对抗Zygisk-IL2CppDumper:Unity游戏安全新策略 本文深入探讨了对抗Zygisk-IL2CppDumper攻击的Unity游戏安全新策略。通过实时内存监控、动态混淆技术和异常行为检测体系,有效防止关键代码被动态提取。文章详细介绍了内存指纹系统、运行时混淆方案和五维特征模型等实用防御手段,帮助开发者提升游戏安全性。 阅读详情

相关推荐

Windows安装ros2(Jazzy版本+win10/win11)-1.配置windows终端

更高版本的terminal可能设置里更加丰富, 有默认以管理员身份启动的选项等,可自行配置。打开微软应用商店, 在其中搜索并下载 Terminal 即可(注意别挂梯子)下载并安装, 安装的位置自行替换,建议别放到系统盘中。点击任务栏中的搜索, 输入store。

weixin_48398592的博客 1454

分布式事务-LCN解决分布式事务

LCN解决分布式事务 1. LCN背景 LCN框架在2017年6月份发布第一个版本,从开始的1.0,已经发展到了5.0版本。 LCN名称是由早期版本的LCN框架命名,在设计框架之初的1.0 ~ 2.0的版本时框架设计的步骤是如下,各取其首字母得来的LCN命名。 5.0以后由于框架兼容了LCN、TCC、TXC三种事务模式,为了避免区分LCN模式,特此将LCN分布式事务改名为TX-LCN分布式事务框架。 2. LCN定位 TX-LCN定位于一款事务协调性框架,框架其本身并不操作事务,而是基于对事务的协调从而达到

蓝天⊙白云的博客 5778

IBM x3650M4服务器更换主板后,导入原有硬盘阵列信息

x3650m4服务器主板坏了,更换好的主板,需要导入原来硬盘的里面的阵列信息 1、开机有提示信息,按C导入配置 2、按Y继续 3、点击start进入阵列卡配置 4、选择configurations 1,点击preview 5、预览硬盘的阵列信息,点击import导入 6、导入成功,可以查看到阵列信息 7、重启服务器,进入操作系统 如果重启找不到操作系统,重启按f12,手动选择从onboard sas controller启动,进入系统一次后面重启就会自动找到并引导系统了。 8、有时候导入阵列

zds00virtue的博客 2万+

分布式事务-LCN

2PC两阶段提交协议 分布式事务通常采用2PC协议,全称Two Phase Commitment Protocol。该协议主要为了解决在分布式数据库场景下,所有节点间数据一致性的问题。分布式事务通过2PC协议将提交分成两个阶段: 阶段一为准备(prepare)阶段。即所有的参与者准备执行事务并锁住需要的资源。参与者ready时,向transaction manager报告已准备就绪。 阶段二为提交阶段(commit)。当transaction manager确认所有参与者都ready后,向所有参与者

weixin_44044929的博客 1900

银河麒麟v10-arm SEALOS离线部署k8s集群(v1.22.8)

示例 如果你想保存一个名为 "my_snapshot" 的 etcd 快照到指定的对象路径你可以使用以下命令: sealos etcd save --backupPath /root --name my_snapshot 如果文件名带时间戳:my_snapshot$(date +"%Y%m%d_%H%M%S") 会生成一个形如 20230913_143045 的时间戳。--restorePath string:指定快照恢复目录(默认为 "/opt/sealos/etcd-restore")。

xjudt的博客 3289

十、强势股的起爆点:第三类买点的实战精解

本文深入解析强势股交易中的第三类买点(三买)实战技巧,涵盖两种经典模式:突破首个中枢后的回踩和底部反转后的直接脱离下跌中枢。通过详细案例和数据分析,揭示三买在捕捉主升浪起爆点时的黄金信号作用,帮助投资者优化风险收益比,提升短线交易成功率。

weixin_30260191的博客 314

分布式事务 LCN

分布式事务 LCN

一个想交朋友的陌生人 1834

Calibre PEX提参实战:如何用hcell和xcell文件精准屏蔽模块(附避坑指南)

本文深入解析Calibre PEX工具中hcell与xcell文件的协同工作机制,提供模块级寄生参数提取方案。通过实战案例和避坑指南,帮助工程师精准屏蔽已验证IP模块,提升仿真效率和数据一致性,适用于65nm以下工艺节点的复杂SoC设计。

weixin_29275257的博客 629

SpringBoot集成Dubbo LCN进行分布式事务管理

前言 在之前的spring+dubbo进行分布式项目搭建时,在面对被@Transactionnal()注解的事务服务时,dubbo是不能将其注册成服务者的。 查阅资料后发现大致原因:是因为我们一般的service发布dubbo服务时,dubbo能够扫描到类上dubbo的@service注解,并为其生成代理,而当我们使用@Transactionnal注解时,将会采用cglib为service生成...

qq_21144985的博客 6694

分子模拟入门教程 | 低调使用 建议收藏

该方法只需要原子的核电荷和少数模拟的环境参数作为输入,所有的性质都是通过求解薛定谔方程得到的,不需要使用任何经验参数。经典的原子水平的分子模拟已经成为提高我们对材料科学和生命系统中分子过程理解的最流行的方法之一。全原子模拟是一种非常强大的以原子分辨率呈现信息的方法,因为在原子模拟中,一个粒子代表一个特定的原子。随着计算机硬件和模拟技术的快速发展,分子模拟不仅可以解决基本的、常规的化学问题,还可以应用于各种复杂体系。然而,由于问题的复杂性以及严重依赖于现象的现实情况,最好是逐案确定合适的模拟方法。

pysonger的博客 786

RK3588+YT9215快速拓展以太网口

YT9215支持7个端口的非阻塞数据传输,确保高效的数据流处理;在开发过程中,最重要的一点就是YT9215与RK3588的GMAC连接和配置部分,下面是gmac1对应dtsi文件的修改,包括注释掉rgmii_phy1对应的mdio1,以及gmac1对应的phy-handle部分,同时将gmac1修改成1000Mbps全双工模式。这就是最简单,最快速的RK3588拓展网口的方法了,如果需要用到交换芯片的其他功能,那就不可以直接使用原厂提供的bin,而是需要对YT9215进行另外的驱动开发。

带着耳朵取流浪的博客 2796

【分布式事务----LCN】LCN原理及使用方式

一、简介 LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。 LCN5.0.2有3种模式,分别是LCN模式,TCC模式,TXC模式 LCN模式: LCN模式是通过代理Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由LCN连接池管理。 该模式的特点: - 该模式...

lgxzzz的博客 4165

VHDL语法学习笔记:一文掌握VHDL语法

今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货。 VHDL语法学习笔记 一、VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed Integrated Circuit Hardware DescriptionLanguage,诞生于 1982 年。 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本 IEEE-1076(简称 87 版)...

2万+

极速解决企业级分布式事务之spingCloud+tx-lcn

极速解决企业级分布式事务之spingCloud+tx-lcn https://blog.youkuaiyun.com/qq_33449307/article/details/102550878中我们实现了[springBoot+jpa+jta+atomikos实现分布式事务,模拟多数据源],这种方式基于2PC的,了解2PC,3PC会知道这些方式存在一些问题: 1.引入了中间件中心化协调者 操作复杂化 一...

qq_33449307的博客 767

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

备注

mysql 锁 volatile 关键字 zookeeper 机制 多线程认识 jvm认识

明耀的博客 322

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SpringCloud系列——TX-LCN分布式事务管理

  前言   SpringCloud分布式架构给我们带来开发上的便利,同时增加了我们对事务管理的难度,微服务的遍地开花,本地事务已经无法满足分布式的要求,由此分布式事务问题诞生。 分布式事务被称为世界性的难题。   更多分布式事务介绍请看这篇文章:再有人问你分布式事务,把这篇扔给他   本文记录整合TX-LCN分布式事务框架管理分布式事务,用的版本是5.0.2.RELEASE   T...

weixin_30326745的博客 1012

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

springboot 事务 抛出异常_SpringBoot统一异常处理后TX-LCN分布式事务无法捕获异常进行回滚...

通常我们使用SpringBoot都会进行统一异常处理,例如写一个BaseController,在BaseController里进行统一异常处理,然后其他的Controller都继承BaseController。当使用tx-lcn做分布式事务时,如果某个服务抛出了异常,然后该异常又被统一异常处理处理掉了,那么分布式事务将不会回滚。方法一:将服务中会被远程RPC调用的接口不进行统一异常处理,那么tx-...

weixin_39937412的博客 621

分布式事务——应用间分布式事务

分布式事务分为应用内多数据源事务和应用间分布式事务,应用内多数据源事务参考基于Atomikos的多数据源分布式事务(XA)解决方案 本文主要介绍应用间的分布式事务 分布式事务的几种实现思路 基于消息队列的分布式事务 即事务发起方首先向消息队列发送消息(注意,此时消息不会被送到消息接收者),然后事务发起方处理本地事务,当本地事务无异常时,向消息中间件发送提交操作,提交刚刚发送的消息;此时消息会...

Simon's Dream 614

springboot搭配TXmanager实现分布式事务

前言:写这个文章主要是给自己做下笔记以免遗忘,同时也给各大码农分享一下,互相学习。 分布式事务的需求来源于系统的服务化。在微服务系统中,无法使用传统的事务达到数据库的一致性。每个子服务都有自己独立的数据源,如果系统初期,没有分表分库,每个子服务的数据源都是连接同一个数据库主机,同一个数据库,那么还可以简单的利用传统的事务,增加代码的冗余达到事务效果。而往往如果已经需要考虑事务的时候,我们的系统应该已经达到了一定的用户量,开始了分表分库。故而分布式事务还是需要了解和使用的。 分布式事务有很多种实现方式,我在这

carrots 2222

LCN分布式事务使用

参考网址:https://www.txlcn.org/en-us/docs/demo/dubbo.html 目的:用户多个模块之间的事务的管理,保持数据的一致性 联通实验室测试 1.启动redis 192.168.100.2服务器上面的 /usr/local/ 2.启动 txlcn-tm 192.168.100.2服务器,端口http...

weixin_41630573的博客 444

分布式事务:中间件方案

TX-LCN      https://www.txlcn.org/zh-cn/ 高性能的分布式事务框架 兼容dubbo、springcloud框架,支持RPC框架拓展,支持各种ORM框架、NoSQL、负载均衡、事务补偿 LCN分布式事务框架是一款事务协调性的框架,框架本身并不创建事务,只是对本地事务做协调控制。 因此该框架与其他第三方的框架兼容性强,支持所有的关系型数据库事务,支持...

琦彦 1万+

分布式事务--TCC的中间件--选型/对比

本文介绍分布式事务的TCC的一些中间件。

IT利刃出鞘的博客 4066

分布式事务

极速解决企业级分布式事务之spingCloud+tx-lcn https://blog.youkuaiyun.com/qq_33449307/article/details/102550878中我们实现了[springBoot+jpa+jta+atomikos实现分布式事务,模拟多数据源],这种方式基于2PC的,了解2PC,3PC会知道这些方式存在一些问题: 1.引入了中间件中心化协调者 操作复杂化 一...

qq_33449307的博客 326

Springcloud微服务搭建(springboot+springcloud+lcn分布式事物)

  单体架构:         起初的web服务都是单体架构,不管多少个模块都在一个项目里面,随着项目模块越来越多,客户量的不断增长,导致系统的负重越来越大,模块达不到高可用,扩展性差,无法满足并发的要求等问题亟待解决。所以引出微服务架构。 微服务架构:          微服务架构就是把单体架构的应用的不同功能拆分成一系列小的web服务,这些小的web服务可以拥有自己私有的数据持久化业务...

EverythingAtOnce的博客 2502

easy-springboot | 分布式事务管理LCN

参考:https://blog.youkuaiyun.com/zyndev/article/details/79604395#%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A1%E7%9A%84%E5%BC%95%E5%85%A5

匠心曲奇的博客 931

springboot集成dubbo分布式项目Demo

架构演变史: 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。 垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。 分布式服...

风一样的男子 805
上一篇: dubbo-zookeeper 单机以及集群搭建
下一篇: Spring Cloud 分布式入门 使用 Spring Cloud Eureka 服务治理以及高可用
xxley
博客等级 码龄10年 24粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值