# SUN-2PC **Repository Path**: sixsixsix516/SUN-2PC ## Basic Information - **Project Name**: SUN-2PC - **Description**: 纯手写2PC - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2023-04-01 - **Last Updated**: 2026-03-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SUN-2PC 两阶段提交(Two-Phase Commit)分布式事务解决方案实现。 ## 项目简介 SUN-2PC 是一个基于 Java 实现的分布式事务两阶段提交协议示例项目。该项目展示了如何通过协调者(Transaction Manager)和参与者(Resource Manager)来保证分布式环境下的事务一致性。 ## 技术栈 - Java - Spring Boot - Maven - HTTP/REST 通信 ## 模块结构 ### 1. common(公共模块) 公共模块,包含通用接口和工具类: - `XA` - 分布式事务接口定义 - `UrlConstant` - URL 常量定义 - `HttpUtil` - HTTP 工具类,提供 POST/GET 请求封装 ### 2. resource-manager(资源管理器) 资源管理器模块,负责实际的事务操作: - `ResourceManager` - 实现 XA 接口的资源管理器,包含 prepare()、commit()、rollback() 方法 - `RMController` - 提供 REST 接口供协调者调用 ### 3. transcation-manager(事务管理器) 事务管理器模块,负责协调多个资源管理器: - `TransactionManager` - 事务管理器核心实现 - `ResourceManagerClient` - 资源管理器客户端,用于与资源管理器通信 - `TMController` - 提供注册、准备、提交等 REST 接口 ### 4. 2PC(示例启动模块) 演示模块,展示如何使用事务管理器。 ## 核心流程 两阶段提交协议包含两个阶段: ### 第一阶段:准备阶段(Prepare) - 事务管理器向所有资源管理器发送 prepare 请求 - 各资源管理器执行事务操作并返回准备状态 - 如果所有资源管理器都准备成功,则进入第二阶段 ### 第二阶段:提交阶段(Commit) - 事务管理器向所有资源管理器发送 commit 请求 - 各资源管理器正式提交事务 - 如果任何资源管理器失败,则向所有资源管理器发送 rollback 请求 ## 快速开始 ### 环境要求 - JDK 8+ - Maven 3.x ### 构建项目 ```bash mvn clean install ``` ### 启动服务 1. 启动资源管理器(Resource Manager): ```bash cd resource-manager mvn spring-boot:run ``` 2. 启动事务管理器(Transaction Manager): ```bash cd transcation-manager mvn spring-boot:run ``` ## API 接口 ### 事务管理器(TM)接口 | 接口 | 方法 | 说明 | |------|------|------| | `/register` | POST | 注册资源管理器 | | `/prepare` | POST | 发起准备阶段 | | `/commit` | POST | 发起提交阶段 | ### 资源管理器(RM)接口 | 接口 | 方法 | 说明 | |------|------|------| | `/prepare` | POST | 准备阶段 | | `/commit` | POST | 提交阶段 | | `/rollback` | POST | 回滚阶段 | ## 示例请求 注册资源管理器: ```json POST /register { "server": "localhost", "port": 8081 } ``` ## 注意事项 - 这是一个演示项目,生产环境请考虑使用 seata、narayana 等成熟方案 - 网络故障和协调者宕机会导致事务阻塞 - 建议配合超时机制和重试策略使用 ## 许可证 MIT License