Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

由Spring Cloud 模拟下单流程实现的实战项目 前言Spring Cloud为开发者提供了快速构建分布式系统中的一些常见工具,如分布式配置中心,服务发现与注册中心,智能路由,服务熔断及降级,消息总线,分布式追踪的解决方案等。本次实战以模拟下单流程为背景,结合Spring Cloud Netflix和分布式事务解决方案中Try Confirm Cancel模式与基于事件驱动的服务架构作为实战演示。开发环境Docker 1.13.1Docker C... 阅读详情

Solar

Spring Cloud为开发者提供了快速构建分布式系统中的一些常见工具,如分布式配置中心,服务发现与注册中心,智能路由,服务熔断及降级,消息总线,分布式追踪的解决方案等。

本次实战以模拟下单流程为背景,结合Spring Cloud Netflix和分布式事务解决方案中Try Confirm Cancel模式与基于事件驱动的服务架构作为实战演示。

开发环境

  • Docker 1.13.1
  • Docker Compose 1.11.1
  • Docker MySQL 5.7.17
  • Docker RabbitMQ 3.6.6
  • Java8 with JCE
  • Spring Cloud Camden.SR6

系统结构

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

Try Confirm Cancel 补偿模式

本实例遵循的是Atomikos公司对微服务的分布式事务所提出的RESTful TCC解决方案。

RESTful TCC模式分3个阶段执行

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

  1. Trying阶段主要针对业务系统检测及作出预留资源请求,若预留资源成功,则返回确认资源的链接与过期时间。
  2. Confirm阶段主要是对业务系统的预留资源作出确认,要求TCC服务的提供方要对确认预留资源的接口实现幂等性,若Confirm成功则返回204,资源超时则证明已经被回收且返回404。
  3. Cancel阶段主要是在业务执行错误或者预留资源超时后执行的资源释放操作,Cancel接口是一个可选操作,因为要求TCC服务的提供方实现自动回收的功能,所以即便是不认为进行Cancel,系统也会自动回收资源。

Event Driven Architecture 基于事件驱动架构

本实例中的order-ms与membership-ms之间的通信是基于事件驱动的。当订单被成功创建并且付款成功之后,该订单的部分信息将会发往membership-ms以进行积分的增加。

从系统层面看,order-ms在EDA中是属于Publisher角色,自然而然地membership-ms就是Subscriber。

Publisher中的事件状态转换如下:

  • NEW —> PENDING —> DONE
  • NEW —> PENDING —> FAILED / NO_ROUTE / NOT_FOUND / ERROR

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

Subscriber中的事件状态转换如下:

  • NEW —> DONE
  • NEW —> FAILED / NOT_FOUND / ERROR

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

部分功能介绍:

  1. Publisher发送消息之前先将消息落地,目的是防止消息的错误发布(业务数据被回滚而消息却发布至Broker)。
  2. Publisher会周期性地扫描NEW状态的消息,并发布至Broker。
  3. 启用mandatory与publisher confirms机制,在消息被持久化至磁盘后将会收到basic.ack,此时可选择将消息转换为DONE或者是直接将其删除。
  4. Publisher将消息发布至Broker后会将其状态由NEW更新为PENDING,PENDING状态的事件将会由另一定时器扫描在当前时钟的3秒之前发布,但是却并未得到basic.ack的事件,并重新发布至Broker。意在消除在单实例的情况下因crash而导致消息状态丢失的边缘情况。
  5. Subscriber的消息幂等性。

基础组件

Zuul Gateway

Zuul在本实例中仅作为路由所使用,配置降低Ribbon的读取与连接超时上限。

Eureka H.A.

多个对等Eureka节点组成高可用集群,并将注册列表的自我保护的阈值适当降低。

Config Server

  • 如果远程配置中有密文{cipher}*,那么该密文的解密将会延迟至客户端启动的时候. 因此客户端需要配置AES的对称密钥encrypt.key,并且客户端所使用的JRE需要安装Java 8 JCE,否则将会抛出Illegal key size相关的异常。 (本例中Docker Compose构建的容器已经安装了JCE,如果远程配置文件没有使用{cipher}*也不必进行JCE的安装)
  • 为了达到开箱即用,选用公开仓库Github或者GitOsc。
  • 本项目中有两个自定义注解 @com.github.prontera.Delay 控制方法的延时返回时间;@com.github.prontera.RandomlyThrowsException 随机抛出异常,人为地制造异常。
  • 默认的远程配置如下
  • solar: delay: time-in-millseconds: 0 exception: enabled: false factor: 7
  • 这些自定义配置正是控制方法返回的时延,随机异常的因子等。
  • 我在服务order,product,account和tcc中的所有Controller上都添加了以上两个注解,当远程配置的更新时候,可以手工刷新/refresh或通过webhook等方法自动刷新本地配置. 以达到模拟微服务繁忙或熔断等情况。

监控服务

Spring Boot Admin

此应用提供了管理Spring Boot服务的简单UI,下图是在容器中运行时的服务健康检测页

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

Hystrix Dashboard

提供近实时依赖的统计和监控面板,以监测服务的超时,熔断,拒绝,降级等行为。

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

Zipkin Server

Zipkin是一款开源的分布式实时数据追踪系统,其主要功能是聚集来自各个异构系统的实时监控数据,用来追踪微服务架构下的系统时延问题. 下图是对order服务的请求进行追踪的情况。

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

业务服务

首次启动时通过Flyway自动初始化数据库。

对spring cloud config server采用fail fast策略,一旦远程配置服务无法连接则无法启动业务服务。

account

用于获取用户信息,用户注册,修改用户余额,预留余额资源,确认预留余额,撤销预留余额。

product

用于获取产品信息,变更商品库存,预留库存资源,确认预留库存,撤销预留库存。

tcc coordinator

TCC资源协调器,其职责如下:

  • 对所有参与者发起Confirm请求。
  • 无论是协调器发生的错误还是调用参与者所产生的错误,协调器都必须有自动恢复重试功能,尤其是在确认的阶段,以防止网络抖动的情况。

order

order服务是本项目的入口,尽管所提供的功能很简单:

  • 下单. 即生成预订单,为了更好地测试TCC功能,在下单时就通过Feign向服务account与product发起预留资源请求,并且记录入库。
  • 确认订单. 确认订单时根据订单ID从库中获取订单,并获取预留资源确认的URI,交由服务tcc统一进行确认,如果发生冲突即记录入库,等待人工处理。

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

membership

用于订单付款成功后,对下单用户的积分进行增加操作。该服务与订单服务是基于消息驱动以进行通信,达到事务的最终一致性。

Swagger UI

下图为product服务的Swagger接口文档,根据下文的服务字典可知,本接口文档可通过http://localhost:8040/swagger-ui.html进行访问. order,account和tcc的文档访问方式亦是如出一撤。

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

运行

Docker Compose运行

在项目根路径下执行脚本build.sh,该脚本会执行Maven的打包操作,并会迭代目录下的*-compose.yml进行容器构建。

构建完成后需要按照指定的顺序启动,需要注意的一点是容器内服务的启动是需要备留预热时间,并非Docker容器启动后容器内的所有服务就能马上启动起来,要注意区分容器的启动和容器内的服务的启动,建议配合docker-compse logs来观察启动情况。而且容器之间的服务是有依赖的,如account-ms和product-ms此类业务服务的启动是会快速失败于config-ms的失联。所以建议按照以下顺序启动Docker容器,并且在一组Docker容器服务完全启动后,再启动下一组的Docker容器。

  1. 启动MySQL,RabbitMQ等基础组件docker-compose -f infrastructure-compose.yml up -d
  2. 启动Eureka Server与Config Serverdocker-compose -f basic-ms-compose.yml up -d
  3. 启动监控服务docker-compose -f monitor-ms-compose.yml up -d
  4. 启动业务服务docker-compose -f business-ms-compose.yml up -d

IDE运行

因为程序本身按照Docker启动,所以对于hostname需要在hosts文件中设置正确才能正常运行:

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

## solar
127.0.0.1 eureka1
127.0.0.1 eureka2
127.0.0.1 rabbitmq
127.0.0.1 zipkin_server
127.0.0.1 solar_mysql
127.0.0.1 gitlab

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

根据依赖关系,程序最好按照以下的顺序执行

docker mysql > docker rabbitmq > eureka server > config server > zipkin server > 其他业务微服务(account-ms, product-ms, order-ms, tcc-coordinator-ms等)

示例

根据附表中的服务字典,我们通过Zuul或Swagge对order服务进行预订单生成操作。

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

POST http://localhost:7291/order/api/v1/orders
Content-Type: application/json;charset=UTF-8
{
 "product_id": 7,
 "user_id": 1
}

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

成功后我们将得到预订单的结果

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

{
 "data": {
 "id": 15,
 "create_time": "2017-03-28T18:18:02.206+08:00",
 "update_time": "1970-01-01T00:00:00+08:00",
 "delete_time": "1970-01-01T00:00:00+08:00",
 "user_id": 1,
 "product_id": 7,
 "price": 14,
 "status": "PROCESSING"
 },
 "code": 20000
}

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

此时我们再确认订单

(如果想测试预留资源的补偿情况,那么就等15s后过期再发请求,注意容器与宿主机的时间)

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

POST http://localhost:7291/order/api/v1/orders/confirmation
Content-Type: application/json;charset=UTF-8
{
 "order_id": 15
}

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

如果成功确认则返回如下结果

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

{
 "data": {
 "id": 15,
 "create_time": "2017-03-28T18:18:02.206+08:00",
 "update_time": "2017-03-28T18:21:32.78+08:00",
 "delete_time": "1970-01-01T00:00:00+08:00",
 "user_id": 1,
 "product_id": 7,
 "price": 14,
 "status": "DONE"
 },
 "code": 20000
}

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

至此就完成了一次TCC事务,当然你也可以测试超时和冲突的情况,这里就不再赘述。

拓展

使用Gitlab作为远程配置仓库

本例中默认使用Github或GitOsc中的公开仓库,出于自定义的需要,我们可以在本地构建Git仓库,这里选用Gitlab为例。

将以下配置添加至docker compose中的文件中并启动Docker Gitlab容器:

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

gitlab:
 image: daocloud.io/daocloud/gitlab:8.16.7-ce.0
 ports:
 - "10222:22"
 - "80:80"
 - "10443:443"
 volumes:
 - "./docker-gitlab/config/:/etc/gitlab/"
 - "./docker-gitlab/logs/:/var/log/gitlab/"
 - "./docker-gitlab/data/:/var/opt/gitlab/"
 environment:
 - TZ=Asia/Shanghai

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

将项目的config-repo添加至Gitlab中,并修改config-ms中git仓库的相关验证等参数即可。

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

 

服务字典

鉴于Spring Boot Actuator的端点所带来的两面性,除了可以增加spring-boot-starter-security来获得强度较弱的HTTP Basic认证外,我们还可以修改management.port和management.context-path来提高攻击成本. 是的,我对每一个服务都修改了以上两个属性,并且兼容了Eureka Server,Hystrix Dashboard,Spring Boot Admin,使这些监控服务仍能正确工作. 因为对以上两个参数修改,我们的监控路径有所变化,如下表

Java-基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

springcloud 完整练习项目 提供Eureka、Ribbon、Zuul微服务集群例子 立即下载

相关推荐

TCC实现分布式事物,java 源码

TCC实现分布式事物,实现多数据源,多应用事物统一管理。代码过多,需经验丰富

分布式事务解决方案之TCC

TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认 Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的 操作即回滚操作。

LU58542226的博客 5227

单细胞实战之亚细胞分群从T/NK至CD4+T细胞——从入门到进阶(中级篇1)

亚细胞分群从T/NK至CD4+T细胞

zfyyzhys的博客 6389

java分布式事务——seata,tcc解决方案总结!

目录 1.分布式事务基础理论 1.1.CAP理论 1.2.BASE理论 2.分布式事务解决方案之2PC(两阶段提交) 1.分布式事务基础理论 我们了解到了分布式事务的基础概念。与本地事务不同的是,分布式系统之所以叫分布式,是因为提供服务的各个节点分布在不同机器上,相互之间通过网络交互。不能因为有一点网络问题就导致整个系统无法提供服务,网络因素成为了分布式事务的考量标准之一。因此,分布式事务需要更进一步的理论支持,接下来,我们先来学习一下分布式事务的CAP理论。 1.1.CAP理论 C..

zhangkaixuan456的博客 2215

Arduino MLX90393磁力计驱动库:高精度三轴霍尔传感器开发指南

三轴霍尔效应磁力计是嵌入式系统中实现无接触角度检测、电子罗盘与电流传感的核心器件。其工作原理基于霍尔电压随外磁场矢量变化的物理特性,通过I²C接口输出高分辨率(16/20-bit)XYZ轴原始数据,并集成温度补偿与数字滤波功能。技术价值体现在确定性响应、低功耗(典型0.5 μA待机)及强抗干扰能力,适用于电池供电设备与实时操作系统环境。典型应用场景包括电机位置反馈、永磁体旋转角度解算、工业编码器和地磁导航。本库专为Arduino生态优化,深度封装MLX90393寄存器协议与自校准流程,同时兼容STM32、E

weixin_29363791的博客 642

Lumerical-定向耦合器1

概述:本文章使用FDE求解器对定向耦合器进行了数值仿真,讨论了耦合器的间距相关性,耦合长度相关性,波长相关性。讨论了脊形波导和条形波导两种情况。

m0_61776728的博客 4613

Java中TCC分布式事务的实现原理

Java中TCC分布式事务的实现原理

wolfking1414的专栏 1118

PMBus协议解析:基于I2C的电源管理实战与TMS320F28003x驱动开发

在嵌入式系统与服务器电源设计中,数字电源管理总线是实现高效、可靠电源监控与控制的关键技术。PMBus协议基于广泛应用的I2C总线物理层,通过定义标准化的命令集、数据格式与时序规范,为多路电源的电压电流监控、动态调整及故障处理提供了高效解决方案。其技术价值在于通过硬件自动处理协议解析、时钟拉伸与中断,显著降低软件复杂度,使开发者能聚焦于电源环路设计等核心逻辑。该协议广泛应用于服务器、通信基站及高性能计算板卡等场景,通过引入数据包错误检查、专用告警线等机制,确保了电源管理的可靠性。本文以TI TMS320F28

weixin_29189377的博客 374

用Java轻松完成一个分布式事务TCC,保姆级教程

什么是 TCC,TCC 是 Try、Confirm、Cancel 三个词语的缩写,最早是由 Pat Helland 于 2007 年发表的一篇名为《Life beyond Distributed Transactions:an Apostate’s Opinion》的论文提出。 TCC 组成 TCC 分为 3 个阶段 Try 阶段:尝试执行,完成所有业务检查(一致性), 预留必须业务资源(准隔离性) Confirm 阶段:如果所有分支的 Try 都成功了,则走到 Confirm 阶段。Confirm 真

qfchenjunbo的博客 1077

VTK GPU 加速渲染技术

/ 创建颜色工具// 创建立方体数据// 创建OpenGL映射器(注意使用vtkOpenGLPolyDataMapper而不是常规的vtkPolyDataMapper)// 启用VBO(顶点缓冲对象)// 声明几何体是静态的以获得最佳性能// 创建actor// 创建渲染器、渲染窗口和交互器renderWindow->SetWindowName("VTK自定义着色器示例");// 添加actor到渲染器。

深之JohnChen的专栏 1240

YOLOv11改进 - 卷积Conv | PConv(Pinwheel-shaped Conv): 风车状卷积用于红外小目标检测 | AAAI 2025

本文介绍了风车状卷积(PConv)和基于尺度的动态(SD)损失在YOLOv11中的结合应用。PConv采用不对称填充,通过特殊结构设计、卷积运算和分组卷积技术,能更好地适应红外小目标的像素高斯空间分布,在少量增加参数的情况下极大扩展感受野。SD损失可根据目标大小动态调整尺度和位置损失的影响。我们将PConv集成到YOLOv11的主干网络低层,并在相关配置文件中进行设置。实验证明,YOLOv11 - PConv在IRSTD - 1K和SIRST - UAVB数据集上取得显著性能提升,验证了方法的有效性和泛化能

魔改工程师的博客 1334

基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

SolarSpring Cloud为开发者提供了快速构建分布式系统中的一些常见工具,如分布式配置中心,服务发现与注册中心,智能路由,服务熔断及降级,消息总线,分布式追踪的解决方案等。本次实战以模拟下单流程为背景,结合Spring Cloud Netflix和分布式事务解决方案中Try Confirm Cancel模式与基于事件驱动的服务架构作为实战演示。开发环境Docker ...

caochi8166的博客 271

【OpenClaw从入门到精通】第26篇:从0到1构建OpenClaw二次发行版——企业专属AI平台实战指南(2026实测)

本文基于OpenClaw 2026.3.7开源内核,聚焦企业级AI平台的二次发行构建,从技术原理、实操流程到商业落地提供完整方法论。核心围绕“内核层-能力层-产品层”三层架构,详解源码编译、私有化部署、企业级特性开发(数据合规、国产化适配、业务系统集成)、产品化包装等关键步骤,并通过审计行业“智审助手”虚拟实战案例具象化落地路径。文章兼顾新手入门与进阶提升,提供可直接复用的代码、配置文件及执行结果,解决企业对AI Agent“开箱即用”“数据不出域”“业务适配”的核心诉求,助力开发者快速打造企业专属AI平台

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 711

无法启动分布式事务_基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

SolarSpring Cloud为开发者提供了快速构建分布式系统中的一些常见工具,如分布式配置中心,服务发现与注册中心,智能路由,服务熔断及降级,消息总线,分布式追踪的解决方案等。本次实战以模拟下单流程为背景,结合Spring Cloud Netflix和分布式事务解决方案中Try Confirm Cancel模式与基于事件驱动的服务架构作为实战演示。开发环境Docker 1.13.1Docke...

weixin_39609573的博客 279

单线激光雷达的工作原理

单线激光雷达通过单一激光束的水平扫描和时间 / 相位测量,实现二维环境的距离感知,是低成本二维导航的核心传感器。尽管其无法直接提供三维信息,但其可靠性和经济性使其在消费级和工业级场景中广泛应用。随着技术发展,部分单线雷达通过振动镜或 MEMS 微振镜实现微小角度偏转,可近似模拟多线扫描效果,进一步拓展了应用边界。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 1859

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Spring Cloud 开源软件都有哪些?

学习一门新的技术如果有优秀的开源项目,对初学者的学习将会是事半功倍,通过研究和学习优秀的开源项目,可以快速的了解此技术的相关应用场景和应用示例,参考优秀开源项目会降低将此技术引入到项目中的成本。为此抽了一些时间为大家寻找了一些非常优秀的 Spring Cloud 开源软件供大家学习参考。 上次写了一篇文章Spring Boot 2.0(三):Spring Boot 开源软件都有哪些 给大家介绍优秀...

xiaoxuan1025的博客 504

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java中的事件驱动架构(EDA)

事件驱动架构是一种设计模式,系统中的各个组件通过事件进行通信。当某个组件发生变化时,会生成一个事件,并将该事件通知给感兴趣的其他组件。命令事件(Command Event):通常意味着请求某个操作。查询事件(Query Event):通常表示请求某些数据。通知事件(Notification Event):表示某个状态变化或操作完成。事件驱动架构(EDA)是一种强大的设计模式,通过事件的生成、捕获和处理来实现系统的解耦和高扩展性。

weixin_53840353的博客 1581

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java学习笔记——EDA事件驱动架构,你掌握了吗

喜欢的朋友可以关注下专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。 事件代表过去发生的事件,事件既是技术架构概念,也是业务概念。以事件为驱动的编程模型称为事件驱动架构EDA。 EDA是一种以事件为媒介,实现组件或服务之间最大松耦合的方式。传统面向接口编程是以接口为媒介,实现调用接口者和接口...

玩赚AI大模型的博客 877

力荐几个不错的Spring Cloud微服务项目

在如今微服务、分布式大行其道的时代,懂点相关的技术、知识无疑可以给自己加分,而要是能有一些现成的、与之相关的实战性项目跟着撸,对于自己而言那将如虎添翼!本文将推荐几个相当不错的跟Spring Cloud相关的微服务项目,帮助大家增长这方面相关的技术! 一、Cloud-Platform 地址:https://gitee.com/geek_qi/cloud-platform 首当其冲的当属目前相当火热的开源项目:Cloud-Platform,在Gitee上目前已达将近16K Star,将近

竹林幽深 2186

分布式事务TCCjava实现

https://github.com/changmingxie/tcc-transaction

szy415love的博客 2036

分布式事务之TCC服务设计和实现注意事项

1、TCC简介 TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题; TCC是服务化的两阶段编程模型,其Try、Confirm、Cancel 3个方法均由业务编码实现; 其中Try操作作为一阶段,负责资源的检查和预留,Confirm操作作为二阶段提交操作,执行真正的业务,Cancel是预留资源的取消; 如下图所示,业务实现TCC...

weixin_34307464的博客 1328

基于RESTful API的TCC补偿模式 分布式事务

前言本例基于Atomikos提出的微服务分布式事务的解决方案, 该方案建立在更加轻量级的HTTP协议之上, 原文如下TCC for transaction management across microservices根据Try Confirm Cancel补偿模式, 有关于Spring Cloud的实战如下https://github.com/prontera/solar示例场景一个简单的TCC应

1万+

TCC java 案例

参考:https://github.com/changmingxie/tcc-transaction

sj1231984的专栏 615

Java分布式事务 两阶段提交的编码实现-TCC

前言:X/A协议实际上也是分两阶段提交的编码实现,只是X/A协议依赖于数据库,需要数据库支持X/A协议,TCC的核心思想是"参与事务的应用程序都应该提供三个http接口,由一个事务协调者进行整体事务的协调" Try接口:预留业务资源;跟普通的操作操作差不多,只是有个status来标识为预生效; Confirm接口:确认执行业务操作;update status改为生效; Cancel接口:取消执...

qq_36184390的博客 4419
上一篇: Java高级架构师-Spring 注解编程之注解属性别名与覆盖
下一篇: Java高级架构师-集合框架使用原理分析
程序员杨过
博客等级 码龄7年 13粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值