SpringCloud 解决分布式事务的两种方式 | 带你读《Spring Cloud Alibaba(2019)》之十九

简介: 本节介绍LCN解决分布式事务,seata解决分布式事务

上一篇:什么是分布式事务? | 带你读《Spring Cloud Alibaba(2019)》之十八

本文来自于《精通Spring Cloud Alibaba》课程的整理,讲师为余胜军,点击查看视频内容
本文系志愿者整理,供配合学习中心课程使用,不做商业用途。

LCN官网基本介绍

http://www.txlcn.org/zh-cn/ LCN并不生产事务,LCN只是本地事务的协调工

LCN基本实现原理

发起方与参与方都与我们的LCN管理器一直保持长连接;
发起方在调用接口之前,先向LCN管理器申请一个全局的事务分组id;
发起方调用接口的时候在请求头中传递事务分组id;
参与方获取到请求头中有事务分组的id的,则当前业务逻辑执行完实现假关闭,不会提交或者回滚当前的事务。
发起方调用完接口后,如果出现异常的情况下,在通知给事务协调者回滚事务,这时候事务协调则告诉给参与方回滚当前的事务。

SpringBoot整合lcn5.0

Maven依赖

<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>

相关配置

  application:
    ###服务的名称
    name: meitemayikt-order
  datasource:
    url: jdbc:mysql://localhost:3306/order?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  cloud:
    nacos:
      discovery:
        ###nacos注册地址
        server-addr: 127.0.0.1:8848
    refresh:
      refreshable: none


tx-lcn:
  client:
    manager-address: 127.0.0.1:8070
  logger:
    enabled: true

用法

参与方与发起方都要加上该注解
@LcnTransaction
@Transactional

源码核心入口

重新feign客户端拦截器 RequestInterceptor
Aop的重学的入口TransactionAspect
实现该接口可以在请求之前处理参数SpringTracingApplier
http://127.0.0.1:8090/insertOrder?age=1

1、Lcn如何判断自己是发起方还是参与方?
根据当前的线程threadlocal中获取事务分组id,如果能够成功获取到则是为参与方,没有能够获取到就是为发起方。
2、A调用B,B调用C 到底会生产几次事务id?

A调用 B 调用C 调用D 只有全局的分组的id 都是有一个局部的事务id

3、参与方如何从请求头中获取事务id?如何加入事务组中?
4、LCN如何实现数据源代理实现假关闭?

学习LCN源码分析的话 入口 @LcnTransaction 必须有AOP才能够对我们注解生效。

TransactionAspectAop的入口类。

深入了解seata解决分布式事务

Seata简单介绍

https://github.com/seata/seata
https://seata.io/zh-cn/index.html

https://github.com/seata/seata/releases/

Seata的实现原理

Seata有3个基本组成部分:

事务协调器(TC):维护全局事务和分支事务的状态,驱动全局提交或回滚。
事务管理器TM:定义全局事务的范围:开始全局事务,提交或回滚全局事务。
资源管理器(RM):管理分支事务正在处理的资源,与TC进行对话以注册分支事务并报告分支事务的状态,并驱动分支事务的提交或回滚。

相关文章
|
4月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
3371 66
|
4月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
5416 81
|
6月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1049 3
|
5月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
4244 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
4月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
4月前
|
人工智能 监控 Java
Spring AI Alibaba实践|后台定时Agent
基于Spring AI Alibaba框架,可构建自主运行的AI Agent,突破传统Chat模式限制,支持定时任务、事件响应与人工协同,实现数据采集、分析到决策的自动化闭环,提升企业智能化效率。
Spring AI Alibaba实践|后台定时Agent
|
5月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
388 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
6月前
|
人工智能 Java 开发者
邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!
邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!
|
7月前
|
人工智能 数据可视化 Java
性能提升 10 倍, DIFY 模式迁移至 Spring AI Alibaba 模式 零改造实现
将 Dify 应用迁移至 Spring AI Alibaba,可兼顾可视化开发效率与代码工程灵活性,显著提升系统性能与扩展能力,适用于复杂 AI 业务场景。
1050 0