eflow 是工单流程编排服务,负责工单创建、审批流实例流转、自动化任务触发、消息通知模板同步,以及历史数据迁移。项目基于 Go、Gin、GORM、easy-workflow、Kafka、Etcd 和 gRPC 构建,并与 eiam、ecmdb、etask、ealert/enotify 等服务协同工作。
- 工单模板、工单实例、流程定义和流程实例管理
- 基于 easy-workflow 的审批流驱动和节点事件处理
- 自动化节点任务创建、重试、定时触发和执行结果同步
- 通过 etask 下发脚本任务,支持 Kafka 和 gRPC 执行模式
- Go 1.26
- Gin / ginx
- GORM / MySQL
- Redis
- Kafka
- Etcd
- gRPC / Protobuf
- Wire
- Cobra / Viper
- easy-workflow
.
├── api/ # protobuf 定义和生成代码
├── cmd/ # Cobra 子命令:server、migrate、sync
├── config/ # 本地配置文件
├── deploy/ # 部署示例
├── internal/
│ ├── client/ # 外部服务 gRPC/HTTP 客户端
│ ├── domain/ # 领域对象
│ ├── event/ # 流程、工单、任务事件定义
│ ├── repository/ # 仓储和 DAO
│ ├── service/ # 核心业务服务
│ └── web/ # HTTP handler
├── ioc/ # Wire 依赖注入
├── migrations/ # 数据库迁移脚本
├── pkg/ # 通用工具包
├── main.go # CLI 入口
└── README.md
运行服务前需要准备:
- MySQL,用于 eflow 主库和 easy-workflow 表
- Redis,用于缓存和运行时协作
- Kafka,用于部分自动化任务下发
- Etcd,用于 gRPC 服务发现
- eiam,用于认证、租户和用户信息
- etask,用于自动化脚本调度和执行
- ecmdb、ealert/enotify,按实际业务场景配置
默认配置文件路径为 config/config.yaml,也可以通过 --config 指定。
go run main.go server --config=config/config.yaml核心配置项:
log:
debug: true
web:
host: "0.0.0.0"
port: 8005
mysql:
dsn: "<user>:<password>@tcp(<host>:3306)/ticket?charset=utf8mb4&parseTime=True&loc=Local"
redis:
addr: "<host>:6379"
password: "<password>"
db: 0
kafka:
network: tcp
addresses:
- "<host>:9092"
etcd:
endpoints:
- "<host>:2379"
encryption:
version: "V1"
key: "<shared-secret-key>"
grpc:
client:
eiam:
name: "eiam"
auth_token: "<token>"
ecmdb:
name: "ecmdb"
auth_token: "<token>"
etask:
name: "scheduler"
auth_token: "<token>"注意:
encryption.key需要和历史敏感数据的加密 key 保持一致,否则迁移后的密文变量无法正确解密。encryption.version当前用于兼容旧格式密文,迁移旧数据时通常使用V1。- 不要把真实密码、飞书/企微密钥、数据库 DSN 提交到公共仓库。
安装依赖并启动:
go mod download
go run main.go server --config=config/config.yaml也可以使用 Makefile:
make run服务启动后会:
- 初始化 IOC 容器
- 注册 easy-workflow 事件处理器
- 启动后台任务
- 启动 HTTP/gRPC 等 server
# 启动服务
go run main.go server --config=config/config.yaml
# 编译检查
go build ./...
# 运行测试
go test ./...
# 生成 Wire 依赖注入代码
wire ./ioc/
# 生成 mock
go generate ./...
# 同步全局通知模板
go run main.go sync template --config=config/config.yaml如果安装了 Task:
task run
task gen
task mock迁移命令:
go run main.go migrate --config=config/config.yaml强制重新执行迁移:
go run main.go migrate --config=config/config.yaml --force迁移配置位于 migration 节点:
migration:
source:
mongo:
dsn: "<mongo-dsn>"
database: "<mongo-db>"
mysql:
dsn: "<source-mysql-dsn>"
batch_size: 100
timeout: "10m"
auto_migrate: true
reset_auto_increment: true
truncate: false
dry_run: false迁移会执行:
- 旧数据复制和结构转换
- 自动建表
- easy-workflow 引擎表初始化
- process instance 自增 ID 同步
- 任务、工作流、实例流程中的 codebook 关联修复
建议先设置 dry_run: true 验证迁移流程,再对目标库执行正式迁移。
eflow 创建或重试自动化任务时,会从 etask runner 拉取变量快照,写入 eflow 的 task 记录,并在下发任务时传给 etask。
相关链路:
internal/service/task/task.go:创建、刷新和重试任务快照internal/service/task/dispatch/execute.go:通过 gRPC 下发 etask 任务internal/service/task/dispatch/kafka.go:通过 Kafka 下发任务
敏感变量由 etask 管理,eflow 不允许通过任务变量接口新增或覆盖敏感变量明文。
deploy/docker-compose.yaml 提供了容器部署示例:
docker compose -f deploy/docker-compose.yaml up -d部署时通常需要挂载生产配置:
volumes:
- ./prod.yaml:/app/config/config.yaml请确认容器所在网络可以访问 MySQL、Redis、Kafka、Etcd 和依赖的内部服务。