# hmily
**Repository Path**: yaoqis/hmily
## Basic Information
- **Project Name**: hmily
- **Description**: 金融级分布式事务解决方案
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://dromara.org
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 605
- **Created**: 2021-11-25
- **Last Updated**: 2026-09-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
金融级柔性分布式事务解决方案
https://dromara.org/
English | 简体中文
-------------------------------------------------------------------------------
# 分布式事务解决方案全景图

-------------------------------------------------------------------------------
# 功能
* 高可靠性 :支持分布式场景下,事务异常回滚,超时异常恢复,防止事务悬挂
* 易用性 :提供零侵入性式的 `Spring-Boot`, `Spring-Namespace` 快速与业务系统集成
* 高性能 :去中心化设计,与业务系统完全融合,天然支持集群部署
* 可观测性 :Metrics多项指标性能监控,以及admin管理后台UI展示
* 多种RPC : 支持 `Apache Dubbo`, `SpringCloud`,`Motan`, `Sofa-rpc`, `brpc`, `tars` 等知名RPC框架
* 日志存储 : 支持 `mysql`, `oracle`, `mongodb`, `redis`, `zookeeper` 等方式
* 复杂场景 : 支持RPC嵌套调用事务
-------------------------------------------------------------------------------
# 必要前提
* 必须使用 `JDK8+`
* TCC模式必须要使用一款 `RPC` 框架, 比如 : `Apache Dubbo`, `SpringCloud`,`Montan`
-------------------------------------------------------------------------------
# TCC模式

当使用`TCC`模式的时候,用户根据自身业务需求提供 `try`, `confirm`, `cancel` 等三个方法,
并且 `confirm`, `cancel` 方法由自身完成实现,框架只是负责来调用,来达到事务的一致性。
-------------------------------------------------------------------------------
# SAGA模式
`SAGA` 模式将长事务拆分为多个可本地提交的业务步骤。使用
`@HmilySAGA(compensationMethod = "...")` 声明步骤及其补偿方法;任一步骤失败后,
框架持久化补偿决议,并按已完成步骤的逆序持续补偿。补偿方法需要由业务保证幂等。
当前版本中,不同服务的参与方需要使用可共同访问的协调仓储,才能保证全局逆序恢复。
-------------------------------------------------------------------------------
# SAGA状态机模式
Hmily 同时提供显式状态机 SAGA。通过 `HmilySagaStateMachineEngine` 注册
JSON 状态语言定义和命名业务服务,再调用 `start(machineName, context)` 启动。
状态定义支持 `ServiceTask`、`Choice`、`CompensationTrigger`、`Succeed` 和 `Fail`。
每次执行会把定义版本、上下文检查点、任务调用和终态结果写入现有 Hmily 仓储,
新的引擎实例可以使用 `recover(instanceId)` 继续执行。`FORWARD` 策略要求正向方法
幂等;默认 `COMPENSATE` 策略按逆序补偿已经可能提交的任务。
浏览器状态机设计器位于 `hmily-saga/hmily-saga-statemachine-designer`。
在该目录执行 `npm install` 和 `npm start`,然后访问
`http://127.0.0.1:9311`。设计器可导入 Hmily JSON,并导出不含布局元数据的
运行时 JSON,或保留画布布局、可继续编辑的设计 JSON。
-------------------------------------------------------------------------------
# TAC模式

当用户使用`TAC`模式的时候,用户必须使用关系型数据库来进行业务操作,框架会自动生成`回滚SQL`,
当业务异常的时候,会执行`回滚SQL`来达到事务的一致性。
-------------------------------------------------------------------------------
# 文档
[](https://dromara.org/projects/hmily)
[](https://dromara.org/zh/projects/hmily)
如果你想使用,你可以参考[快速开始](https://dromara.org/zh/projects/hmily)
# 租约验收测试
恢复 worker 通过仓储中的租约和 fencing token 协调。Harness 提供真实双 worker
Docker Compose 验收,覆盖并发扫描、长调用期间续租、暂停/恢复后的 fencing、
TTL 到期接管、崩溃接管以及终态租约释放:
```bash
mvn --settings D:\maven\settings.xml -pl hmily-harness -am verify -Precovery-lease-compose-it -Dmaven.javadoc.skip=true
mvn --settings D:\maven\settings.xml -pl hmily-harness -am test -Pmysql-it -Dmaven.javadoc.skip=true
mvn --settings D:\maven\settings.xml -pl hmily-harness -am verify -Prepository-it -Dmaven.javadoc.skip=true
```
Compose profile 会启动两个 Java 21 Hmily worker 和真实 MySQL 仓储。Testcontainers
负责创建并清理本次测试的容器、网络和卷,资源统一带有 `hmily` 项目/分组标签。
-------------------------------------------------------------------------------
# 关于Hmily
Hmily是柔性分布式事务解决方案,提供了`TCC`、`SAGA`、`TAC` 与 `XA` 模式。
它以零侵入以及快速集成方式能够方便的被业务进行整合。
在性能上,日志存储异步(可选)以及使用异步执行的方式,不损耗业务方法方法。
之前是由我个人开发,目前由我在京东数科已经重新启动,未来将会是金融场景的分布式事务解决方案。
-------------------------------------------------------------------------------
# 关注趋势
[](https://starchart.cc/yu199195/hmily)
-------------------------------------------------------------------------------
# 用户墙
# 支持
 