# ferryman2
**Repository Path**: jcown/ferryman2
## Basic Information
- **Project Name**: ferryman2
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-04
- **Last Updated**: 2026-03-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Ferryman V2.0
**面向信创环境的高性能数据交换网关**
[](LICENSE)
[](https://openjdk.org/projects/jdk/21/)
[](https://spring.io/projects/spring-boot)
[在线文档](./docs/) | [快速开始](#快速开始) | [贡献指南](./CONTRIBUTING.md) | [English](./README.en.md)
---
## Recent Changes
### v2.0.0 - Node Management Redesign (2026-03-09)
**Breaking Change**: "传输管理" (Transfer Management) 模块已重构为"节点管理" (Node Management)。
- ✨ **新的节点抽象**: 统一抽象 Runner + MQ 源 + 队列配置
- ✨ **节点角色**: 中心节点(CENTER)和分节点(EDGE)的逻辑角色区分
- ✨ **简化的任务创建**: 通过选择节点而非配置复杂的队列映射
- 📚 **用户指南**: [节点管理功能文档](./ferryman-web/docs/features/node-management.md)
- 🔄 **数据迁移**: [数据迁移脚本](./ferryman-admin/scripts/migrate-to-nodes.sql)
**迁移说明**:
- 现有传输对象会自动迁移到节点
- 旧路由 `/config/transfer-management` 重定向到 `/config/node-management`
- 旧数据保留3个月,建议在此期间完成验证和切换
---
## 项目简介
Ferryman 是一款面向**信创环境**的高性能数据交换网关,支持国产消息中间件(TongLink/Q)与文件系统之间的可靠数据传输。采用**控制面与数据面分离**的云原生架构,具备虚拟线程优化、原子落盘、断点续传等企业级特性。
### 核心特性
| 特性 | 描述 |
|------|------|
| 🚀 **Java 21 虚拟线程** | 基于 Virtual Threads 的高并发任务执行,大幅提升吞吐量 |
| 🏗️ **控制面/数据面分离** | Admin 控制面 + Runner 数据面架构,支持水平扩展 |
| 🔒 **原子落盘** | 文件写入采用原子操作,确保数据一致性 |
| 📡 **断点续传** | 基于位点的传输恢复机制,网络中断后自动续传 |
| 🇨🇳 **信创环境支持** | 原生支持达梦 DM8、TongLink/Q 等国产化组件 |
| 📊 **实时监控** | gRPC 通信 + Actuator 指标,完整的运维可观测性 |
---
## 系统架构
```mermaid
graph TB
subgraph "控制面 (Admin)"
A[Admin gRPC Server] --> B[Admin Service]
B --> C[(达梦 DM8)]
B --> D[任务调度器]
B --> E[Runner 注册中心]
end
subgraph "数据面 (Runner)"
F[Runner gRPC Client] --> G[Runner Core]
G --> H[(H2 本地库)]
G --> I[任务执行器]
I --> J[MQ 适配器]
I --> K[文件处理器]
end
subgraph "外部系统"
L[TongLink/Q]
M[文件系统]
end
A <-->|gRPC 心跳/配置| F
J <-->|消息收发| L
K <-->|文件读写| M
style A fill:#4A90D9
style F fill:#67C23A
```
### 架构说明
- **Admin(控制面)**:负责任务编排、配置管理、Runner 节点监控
- **Runner(数据面)**:负责实际的数据传输任务执行
- **gRPC 通信**:Admin 与 Runner 之间通过 gRPC 进行心跳、配置同步、日志上报
- **数据库**:Admin 使用达梦 DM8(生产)/ H2(开发),Runner 使用 H2 本地库
---
## 快速开始
### 环境要求
| 组件 | 版本要求 |
|------|----------|
| JDK | 21+ |
| Maven | 3.9+ |
| Node.js | 18+ (仅 Web 控制台) |
| 达梦 DM8 | 8.1.3+ (可选,生产环境) |
### 1. 克隆项目
```bash
git clone https://gitee.com/your-username/ferryman.git
cd ferryman
```
### 2. 配置数据库
复制配置模板:
```bash
# Admin 配置
cp ferryman-admin/ferryman-admin-grpc/src/main/resources/config/application.yml.example \
ferryman-admin/ferryman-admin-grpc/src/main/resources/config/application.yml
# Runner 配置
cp ferryman-runner/ferryman-runner-grpc/src/main/resources/config/application.yml.example \
ferryman-runner/ferryman-runner-grpc/src/main/resources/config/application.yml
```
编辑配置文件,替换 `YOUR_*_HERE` 占位符:
```yaml
# 示例:Admin 数据库配置
spring:
datasource:
url: jdbc:dm://localhost:5236/FERRYMAN
username: ${DB_USERNAME:ferryman}
password: ${DB_PASSWORD:your_password_here}
```
### 3. 编译项目
```bash
mvn clean package -DskipTests
```
### 4. 启动服务
```bash
# 解压 Admin
cd ferryman-admin/ferryman-admin-grpc/target
unzip ferryman-admin-grpc-1.0.0-SNAPSHOT.zip
cd ferryman-admin-grpc-1.0.0-SNAPSHOT
# 启动 Admin
bin/startup.bat # Windows
bin/startup.sh # Linux/Mac
# 解压 Runner
cd ../../../ferryman-runner/ferryman-runner-grpc/target
unzip ferryman-runner-grpc-1.0.0-SNAPSHOT.zip
cd ferryman-runner-grpc-1.0.0-SNAPSHOT
# 启动 Runner
bin/startup.bat # Windows
bin/startup.sh # Linux/Mac
```
### 5. 访问服务
| 服务 | 地址 |
|------|------|
| Admin HTTP | http://localhost:8080 |
| Admin gRPC | localhost:9096 |
| Runner HTTP | http://localhost:9090 |
| Web 控制台 | http://localhost:5173 (开发模式) |
---
## 打包部署
### 目录结构
```
ferryman-{admin|runner}-grpc-1.0.0-SNAPSHOT/
├── bin/ # 运维脚本(startup/shutdown/status)
├── config/ # 外部配置文件
├── lib/ # JAR 依赖库
├── logs/ # 运行时日志
├── data/ # 数据目录(H2 数据库/本地缓存)
├── temp/ # 临时文件(原子落盘缓冲)
└── backup/ # 备份目录(发送成功后归档)
```
### 运维脚本
| 脚本 | 功能 |
|------|------|
| `startup.bat/sh` | 启动服务(自动检测 Java 21、创建目录、配置 JVM 参数) |
| `shutdown.bat/sh` | 优雅停机(SIGTERM + 超时强制终止) |
| `status.bat/sh` | 状态查询(进程 PID、HTTP 端点、API 详细状态) |
### JVM 参数
```bash
-Xms512m -Xmx1g # 内存配置
--enable-preview # 启用预览特性(虚拟线程)
-XX:+UseZGC # 使用 ZGC 垃圾回收器
-Djdk.virtualThreadScheduler.parallelism=4 # 虚拟线程并行度
-Dspring.config.location=../config/application.yml # 外部配置
```
---
## 项目结构
```
ferryman/
├── ferryman-common/ # 公共模块
│ ├── ferryman-common-core/ # 核心工具类
│ ├── ferryman-common-protocol/ # Protobuf 协议定义
│ └── ferryman-common-grpc/ # gRPC 公共组件
├── ferryman-admin/ # 控制面
│ ├── ferryman-admin-service/ # 业务服务层
│ ├── ferryman-admin-api/ # REST API 层
│ └── ferryman-admin-grpc/ # gRPC 服务入口
├── ferryman-runner/ # 数据面
│ ├── ferryman-runner-core/ # 核心执行引擎
│ ├── ferryman-runner-tasks/ # 任务类型实现
│ └── ferryman-runner-grpc/ # gRPC 客户端
├── ferryman-web/ # Vue 3 Web 控制台
├── docs/ # 文档
│ ├── design/ # UI 设计文档
│ ├── api/ # API 文档
│ └── deployment/ # 部署文档
├── LICENSE # Apache 2.0 许可证
├── CONTRIBUTING.md # 贡献指南
└── README.md # 本文件
```
---
## 技术栈
### 后端
| 分类 | 技术 | 版本 |
|------|------|------|
| 核心框架 | Spring Boot | 3.2.5 |
| Java 版本 | OpenJDK | 21 |
| RPC 框架 | gRPC | 1.61.1 |
| ORM 框架 | MyBatis-Plus | 3.5.5 |
| 数据库 | 达梦 DM8 / H2 | 8.1.3 / 2.2.224 |
| 认证授权 | Sa-Token | 1.37.0 |
| 工具类 | Hutool | 5.8.26 |
### 前端
| 分类 | 技术 | 版本 |
|------|------|------|
| 框架 | Vue | 3.4.x |
| UI 库 | Arco Design Vue | 2.x |
| 构建 | Vite | 5.x |
| 状态管理 | Pinia | 2.x |
---
## 开发指南
### 本地开发
```bash
# 启动后端(开发模式)
cd ferryman-admin/ferryman-admin-grpc
mvn spring-boot:run
cd ferryman-runner/ferryman-runner-grpc
mvn spring-boot:run
# 启动前端
cd ferryman-web
npm install
npm run dev
```
### 运行测试
```bash
mvn test
```
### 代码规范
请参阅 [CONTRIBUTING.md](./CONTRIBUTING.md) 了解:
- 代码风格规范
- Commit Message 格式
- 分支管理策略
- Pull Request 流程
---
## 贡献
欢迎贡献代码、报告问题或提出建议!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'feat: add amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 提交 Pull Request
详见 [CONTRIBUTING.md](./CONTRIBUTING.md)
---
## 许可证
本项目基于 [Apache License 2.0](./LICENSE) 开源协议。
---
## 联系方式
- 问题反馈:[Gitee Issues](https://gitee.com/your-username/ferryman/issues)
- 邮件:ferryman@example.com
---
**⭐ 如果这个项目对你有帮助,请给一个 Star!⭐**