English | 中文
面向电商反欺诈场景的低代码风控规则引擎,支持可视化规则配置、决策流编排、灰度发布和版本管理。业务人员可独立配置风控规则,50ms 内返回决策结果。
- 可视化规则编辑器 — 表单化配置条件/动作,无需编写代码;支持切换到 Groovy DSL 模式自由编写脚本
- 决策流编排 — 基于 React Flow 的拖拽式流程编辑器,支持条件分支、规则集、黑白名单、合并等多种节点类型
- 规则测试 — 内置测试面板,输入 JSON 数据即时预览执行结果
- 版本管理 — 每次修改自动生成版本快照,支持查看完整变更历史
- 灰度发布(Canary) — 按流量比例灰度推送新版本,支持规则和决策流的可视化 Diff 对比(并排 React Flow 画布 + JSON 文本对比)
- 断路器保护 — Resilience4j 断路器 + 50ms 超时熔断,保障支付链路稳定
- RBAC 权限体系 — 基于 Sa-Token 的用户/角色/权限三级管理
- 团队数据隔离 — 多团队场景下自动隔离规则、决策流等资源
- 审计日志 — 全量记录用户操作,支持按模块/时间/操作者检索
- 监控仪表盘 — Prometheus 指标 + Grafana 可视化,覆盖 P50/P95/P99 延迟
- 执行日志 — 每次规则决策的完整执行记录,含输入、输出、耗时、命中规则
- 数据分析 — 规则命中趋势、决策分布统计
- 名单管理 — 黑名单/白名单的增删改查,规则执行时实时引用
- 缓存管理 — Caffeine 本地缓存 + 手动刷新,规则加载 < 5ms
- 多环境管理 (实验性) — DEV / STAGING / PRODUCTION 环境隔离与规则克隆
- 导入导出 (实验性) — 规则 JSON 文件导出/导入,支持跨系统迁移
截图存放在
pub_docs/screenshots/目录。
| 截图 | 说明 |
|---|---|
![]() |
灰度发布列表 |
![]() |
新建灰度配置弹窗 |
![]() |
选择决策流目标类型 |
![]() |
决策流可视化版本对比 |
![]() |
JSON 文本版本对比 |
完整截图索引见 pub_docs/screenshots/README.md。
┌─────────────────────────────────────────────────┐
│ Frontend │
│ React 19 + TypeScript + Ant Design + React Flow │
│ (Port 3000) │
└────────────────────┬────────────────────────────┘
│ HTTP / REST API
▼
┌─────────────────────────────────────────────────┐
│ Spring Boot 3.3 (Port 8080) │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Controller│ │ Service │ │ Rule Engine │ │
│ │ Layer │ │ Layer │ │ (Groovy Sandbox)│ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Auth │ │ Cache │ │ Resilience4j │ │
│ │ (Sa-Token)│ │(Caffeine)│ │ (CircuitBreaker)│ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
└────────────────────┬────────────────────────────┘
│ JPA / JDBC
▼
┌─────────────────────────────────────────────────┐
│ PostgreSQL + Flyway Migration │
└─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ Prometheus + Grafana (监控可选) │
└─────────────────────────────────────────────────┘
| 技术 | 版本 | 用途 |
|---|---|---|
| Java | 17+ | 运行时环境(推荐 Java 21 以支持虚拟线程) |
| Spring Boot | 3.3.0 | 应用框架 |
| Groovy | 4.0.22 | 规则 DSL 动态编译与执行 |
| PostgreSQL | 16+ | 数据持久化 |
| Spring Data JPA | — | ORM 框架 |
| Flyway | 11.0.0 | 数据库版本迁移 |
| Caffeine | 3.1.8 | 本地缓存 |
| Resilience4j | 2.1.0 | 断路器 / 超时熔断 |
| Sa-Token | 1.39.0 | 权限认证 |
| Micrometer | 1.12.0 | Prometheus 指标采集 |
| Gradle | 8.5+ | 构建工具 |
| 技术 | 版本 | 用途 |
|---|---|---|
| React | 19.0 | UI 框架 |
| TypeScript | 5.6 | 类型安全 |
| Ant Design | 5.22 | 企业级 UI 组件库 |
| React Flow (@xyflow/react) | 12.10 | 决策流可视化编排 |
| Zustand | 5.0 | 状态管理 |
| Vite | 6.0 | 构建与开发服务器 |
| Axios | 1.7 | HTTP 客户端 |
| 技术 | 用途 |
|---|---|
| JUnit 5 | 单元测试 |
| Mockito | Mock 框架 |
| H2 Database | 内存数据库(测试替身) |
| Testcontainers | 集成测试(PostgreSQL 容器) |
| JaCoCo | 代码覆盖率 |
前置条件:Docker + Docker Compose
# 克隆项目
git clone https://github.com/your-org/another-rule-engine.git
cd another-rule-engine
# 一键启动(PostgreSQL + 后端 + 前端)
docker compose up -d
# 查看日志
docker compose logs -f backend启动完成后访问:
- 前端界面: http://localhost:3000
- 后端 API: http://localhost:8080
- 健康检查: http://localhost:8080/actuator/health
自定义配置(可选):
# 修改数据库密码等环境变量
cp .env.example .env
# 编辑 .env 文件,然后重新启动
docker compose up -d常用命令:
docker compose up -d # 后台启动
docker compose down # 停止并删除容器
docker compose down -v # 停止并删除容器 + 数据卷(清除数据库数据)
docker compose logs -f backend # 查看后端日志
docker compose build --no-cache # 重新构建镜像| 依赖 | 最低版本 | 说明 |
|---|---|---|
| JDK | 17 | 推荐 Java 21(支持虚拟线程) |
| PostgreSQL | 14 | 推荐 16+ |
| Node.js | 18+ | 前端开发 |
| npm | 9+ | 前端包管理 |
git clone https://github.com/your-org/another-rule-engine.git
cd another-rule-engine创建 PostgreSQL 数据库:
CREATE DATABASE yare_engine;编辑 src/main/resources/application.yml,修改数据库连接信息:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/yare_engine
username: your_username
password: your_passwordFlyway 会在应用启动时自动执行数据库迁移脚本。
# 编译项目
./gradlew build
# 启动后端服务(端口 8080)
./gradlew bootRuncd frontend
# 安装依赖
npm install
# 启动开发服务器(端口 3000,自动代理到后端 8080)
npm run dev打开浏览器访问 http://localhost:3000,使用默认账号登录。
# 后端测试
./gradlew test
# 后端测试 + 覆盖率报告(生成在 build/reports/jacoco/)
./gradlew test jacocoTestReport
# 前端构建检查
cd frontend && npm run build核心配置文件:src/main/resources/application.yml
| 配置路径 | 默认值 | 说明 |
|---|---|---|
server.port |
8080 |
后端服务端口 |
spring.datasource.* |
— | PostgreSQL 连接信息 |
spring.cache.caffeine.spec |
maximumSize=5000,expireAfterWrite=10m |
缓存策略 |
rule-engine.execution.default-timeout-ms |
50 |
规则执行超时(毫秒) |
rule-engine.execution.degradation-decision |
PASS |
超时降级决策 |
resilience4j.circuitbreaker.instances.ruleExecution.* |
— | 断路器参数 |
sa-token.timeout |
86400 |
Token 有效期(秒) |
前端开发代理配置在 frontend/vite.config.ts:
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true,
},
}所有 API 以 /api/v1 为前缀,以下为主要接口分组:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/rules |
规则列表 |
| POST | /api/v1/rules |
创建规则 |
| PUT | /api/v1/rules/{id} |
更新规则 |
| DELETE | /api/v1/rules/{id} |
删除规则 |
| POST | /api/v1/rules/{id}/test |
测试执行规则 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/decision-flows |
决策流列表 |
| POST | /api/v1/decision-flows |
创建决策流 |
| PUT | /api/v1/decision-flows/{id} |
更新决策流 |
| POST | /api/v1/decision-flows/{id}/test |
测试执行 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/rules/{id}/versions |
规则版本历史 |
| GET | /api/v1/decision-flows/{id}/versions |
决策流版本历史 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/grayscale |
灰度配置列表 |
| POST | /api/v1/grayscale |
创建灰度配置 |
| PUT | /api/v1/grayscale/{id}/status |
更新灰度状态 |
| GET | /api/v1/grayscale/{id}/diff |
版本差异对比 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/v1/decision/execute |
同步执行决策 |
| POST | /api/v1/decision/async |
异步执行决策 |
| GET | /api/v1/decision/async/{id}/result |
查询异步结果 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/v1/auth/login |
登录 |
| POST | /api/v1/auth/logout |
登出 |
| GET | /api/v1/system/users |
用户管理 |
| GET | /api/v1/system/roles |
角色管理 |
| GET | /api/v1/audit-logs |
审计日志 |
| GET | /api/v1/features |
功能开关状态 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /actuator/health |
健康检查 |
| GET | /actuator/prometheus |
Prometheus 指标 |
| GET | /api/v1/metrics/* |
业务指标 |
another-rule-engine/
├── src/main/java/com/example/ruleengine/
│ ├── RuleEngineApplication.java # 启动类
│ ├── controller/ # REST API 控制器
│ │ ├── RuleController.java # 规则 CRUD
│ │ ├── DecisionFlowController.java # 决策流管理
│ │ ├── DecisionController.java # 决策执行
│ │ ├── GrayscaleController.java # 灰度发布
│ │ ├── AuthController.java # 认证授权
│ │ ├── AuditLogController.java # 审计日志
│ │ ├── NameListController.java # 名单管理
│ │ ├── AnalyticsController.java # 数据分析
│ │ ├── MetricsController.java # 监控指标
│ │ └── ... # 其他控制器
│ ├── service/ # 业务逻辑层
│ │ ├── RuleExecutionService.java # 规则执行服务
│ │ ├── DecisionFlowExecutionService.java
│ │ ├── grayscale/ # 灰度发布
│ │ ├── version/ # 版本管理
│ │ ├── auth/ # 认证授权
│ │ ├── audit/ # 审计日志
│ │ ├── analytics/ # 数据分析
│ │ └── ...
│ ├── engine/ # 规则引擎核心
│ │ ├── GroovyScriptEngine.java # Groovy 脚本执行引擎
│ │ ├── ScriptCacheManager.java # 脚本编译缓存
│ │ ├── ClassLoaderManager.java # 类加载器管理
│ │ ├── SecurityConfiguration.java # 沙箱安全配置
│ │ └── SecurityAuditService.java # 安全审计
│ ├── domain/ # JPA 实体
│ │ ├── Rule.java # 规则
│ │ ├── RuleVersion.java # 规则版本
│ │ ├── DecisionFlow.java # 决策流
│ │ ├── GrayscaleConfig.java # 灰度配置
│ │ ├── ExecutionLog.java # 执行日志
│ │ ├── SysUser.java / SysRole.java / SysPermission.java
│ │ └── ...
│ ├── model/ # DTO / Request / Response
│ ├── repository/ # JPA Repository
│ ├── config/ # Spring 配置类
│ ├── exception/ # 全局异常处理
│ ├── cache/ # 缓存配置
│ ├── constants/ # 常量定义
│ └── metrics/ # 指标采集
│
├── src/main/resources/
│ ├── application.yml # 应用配置
│ └── db/migration/ # Flyway 迁移脚本 (V1 ~ V22+)
│
├── frontend/ # React 前端
│ ├── src/
│ │ ├── pages/ # 页面组件
│ │ │ ├── RuleListPage.tsx # 规则列表
│ │ │ ├── RuleEditPage.tsx # 规则编辑
│ │ │ ├── DecisionFlowEditorPage.tsx # 决策流编辑器
│ │ │ ├── GrayscalePage.tsx # 灰度发布
│ │ │ ├── MonitoringPage.tsx # 监控面板
│ │ │ ├── AnalyticsPage.tsx # 数据分析
│ │ │ ├── NameListPage.tsx # 名单管理
│ │ │ ├── system/ # 系统管理
│ │ │ │ ├── UserManagementPage.tsx
│ │ │ │ ├── RoleManagementPage.tsx
│ │ │ │ └── AuditLogPage.tsx
│ │ │ └── ...
│ │ ├── components/ # 通用组件
│ │ │ ├── flow/ # 决策流编辑器组件
│ │ │ │ ├── FlowCanvas.tsx # React Flow 画布
│ │ │ │ ├── NodePalette.tsx # 节点面板
│ │ │ │ ├── NodeConfigPanel.tsx # 节点配置
│ │ │ │ ├── nodes/ # 自定义节点类型
│ │ │ │ │ ├── ConditionNode.tsx # 条件节点
│ │ │ │ │ ├── RuleSetNode.tsx # 规则集节点
│ │ │ │ │ ├── BlacklistNode.tsx # 黑名单节点
│ │ │ │ │ ├── WhitelistNode.tsx # 白名单节点
│ │ │ │ │ ├── MergeNode.tsx # 合并节点
│ │ │ │ │ └── ...
│ │ │ ├── rules/ # 规则编辑器组件
│ │ │ ├── FlowGraphDiff.tsx # 决策流可视化 Diff
│ │ │ ├── DiffViewer.tsx # 通用文本 Diff
│ │ │ └── ...
│ │ ├── api/ # API 调用层
│ │ ├── stores/ # Zustand 状态管理
│ │ ├── hooks/ # 自定义 Hooks
│ │ ├── layouts/ # 布局组件
│ │ ├── types/ # TypeScript 类型定义
│ │ └── utils/ # 工具函数
│ ├── vite.config.ts # Vite 配置
│ └── package.json # 前端依赖
│
├── pub_docs/ # 公开文档
│ ├── screenshots/ # 截图
│ ├── multi-environment.md # 多环境功能文档
│ └── import-export.md # 导入导出功能文档
│
├── Dockerfile # 后端 Docker 镜像(多阶段构建)
├── docker-compose.yml # 一键部署(PostgreSQL + 后端 + 前端)
├── .dockerignore # Docker 构建排除
├── build.gradle # Gradle 构建配置
├── settings.gradle # Gradle 设置
└── CLAUDE.md # AI 辅助开发上下文
部分功能默认关闭(开发中),可通过 application.yml 手动启用:
rule-engine:
features:
multi-environment:
enabled: false # 设为 true 启用多环境管理(DEV/STAGING/PROD)
import-export:
enabled: false # 设为 true 启用规则导入导出启用后,前端侧边栏会自动显示对应菜单项。详见:
本项目仅供学习和研究使用。未经授权不得用于商业用途。




