# 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 | 简体中文

gitee stars github forks github stars github contributors


------------------------------------------------------------------------------- # 分布式事务解决方案全景图 ![](https://yu199195.github.io/images/hmily/hmily.png) ------------------------------------------------------------------------------- # 功能 * 高可靠性 :支持分布式场景下,事务异常回滚,超时异常恢复,防止事务悬挂 * 易用性 :提供零侵入性式的 `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模式 ![](https://yu199195.github.io/images/hmily/hmily-tcc.png) 当使用`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模式 ![](https://yu199195.github.io/images/hmily/hmily-tac.png) 当用户使用`TAC`模式的时候,用户必须使用关系型数据库来进行业务操作,框架会自动生成`回滚SQL`, 当业务异常的时候,会执行`回滚SQL`来达到事务的一致性。 ------------------------------------------------------------------------------- # 文档 [![EN doc](https://img.shields.io/badge/document-English-blue.svg)](https://dromara.org/projects/hmily) [![CN doc](https://img.shields.io/badge/文档-中文版-blue.svg)](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` 模式。 它以零侵入以及快速集成方式能够方便的被业务进行整合。 在性能上,日志存储异步(可选)以及使用异步执行的方式,不损耗业务方法方法。 之前是由我个人开发,目前由我在京东数科已经重新启动,未来将会是金融场景的分布式事务解决方案。 ------------------------------------------------------------------------------- # 关注趋势 [![Stargazers over time](https://starchart.cc/yu199195/hmily.svg)](https://starchart.cc/yu199195/hmily) ------------------------------------------------------------------------------- # 用户墙 # 支持 ![](https://yu199195.github.io/images/qq.png) ![](https://yu199195.github.io/images/public.jpg)