# DMS
**Repository Path**: dunimd/dms
## Basic Information
- **Project Name**: DMS
- **Description**: DMS (Dunimd Middleware Service) — 一个高性能的 Rust 中间件框架,统一后端基础设施。专为企业级规模构建,具有模块化架构、内置可观测性和分布式系统支持。
- **Primary Language**: Rust
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/dunimd/dms
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-11-21
- **Last Updated**: 2025-12-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Dunimd, DMS
## README
# DMS (Dunimd Middleware Service)
[English](README.md) | 简体中文
**DMS (Dunimd Middleware Service)** — 一个高性能的 Rust 中间件框架,统一后端基础设施。专为企业级规模构建,具有模块化架构、内置可观测性和分布式系统支持。
🏗️ 核心架构
### 📐 模块化设计
DMS 采用高度模块化的架构,拥有 12 个核心模块,支持按需组合和无缝扩展:
| 模块 | 描述 |
|:--------|:-------------|
| **auth** | 认证与授权(JWT、OAuth、权限) |
| **cache** | 多后端缓存抽象(内存、Redis、混合) |
| **config** | 多源配置管理与热重载 |
| **core** | 运行时、错误处理和服务上下文 |
| **device** | 设备控制、发现和智能调度 |
| **fs** | 安全的文件系统操作和管理 |
| **gateway** | API 网关,支持负载均衡、限流和熔断 |
| **hooks** | 生命周期事件钩子(启动、关闭等) |
| **log** | 结构化日志与追踪上下文集成 |
| **observability** | 指标、追踪和 Grafana 集成 |
| **queue** | 分布式队列抽象(Kafka、RabbitMQ、Redis、内存) |
| **service_mesh** | 服务发现、健康检查和流量管理 |
### 🚀 核心特性
#### 🔍 分布式追踪
- W3C 追踪上下文标准实现
- 全链路 TraceID/SpanID 传播
- 业务上下文的数据传输
- 多语言兼容性(Java、Go、Python)
#### 📊 企业级可观测性
- 原生 Prometheus 指标导出
- Counter、Gauge、Histogram、Summary 指标类型
- 开箱即用的 Grafana 仪表板集成
- 实时性能统计与分位数计算
- 全栈指标(CPU、内存、I/O、网络)
#### 🤖 智能设备管理
- 自动发现和注册
- 高效的资源池管理
- 基于策略的调度与优先级支持
- 动态负载均衡
- 完整的设备生命周期管理
#### 📝 结构化日志
- 支持 JSON 和文本格式
- 可配置的采样率
- 智能日志轮转
- 自动包含追踪上下文
- DEBUG/INFO/WARN/ERROR 日志级别
#### ⚙️ 灵活配置
- 多源加载(文件、环境变量、运行时)
- 热配置更新
- 模块化架构支持按需组合
- 基于插件的扩展机制
#### 📁 安全文件系统
- 统一项目根目录管理
- 原子文件操作
- 分类目录结构
- JSON 数据持久化
- 安全路径处理
🛠️ 安装与环境
### 前置要求
- **Rust**: 1.65+ (2021 版本)
- **Cargo**: 1.65+
- **平台**: Linux、macOS、Windows
### 快速设置
将 DMS 添加到您项目的 `Cargo.toml`:
```toml
[dependencies]
dms_core = { git = "https://gitee.com/dunimd/dms" }
```
或者使用 cargo add:
```bash
cargo add dms-core --git https://gitee.com/dunimd/dms
```
⚡ 快速开始
### 核心 API 使用
```rust
use dms_core::prelude::*;
#[tokio::main]
async fn main() -> DMSResult<()> {
// 构建服务运行时
let app = DMSAppBuilder::new()
.with_config("config.yaml")?
.with_logging(DMSLogConfig::default())?
.with_observability(DMSObservabilityConfig::default())?
.build()?;
// 运行业务逻辑
app.run(|ctx: &DMSServiceContext| async move {
ctx.logger().info("service", "DMS service started")?;
// 您的业务代码在这里
Ok(())
}).await
}
```
### 可观测性示例
```rust
use dms_core::observability::*;
#[traced(name = "user_service")]
async fn get_user(ctx: &DMSServiceContext, user_id: u64) -> DMSResult {
// 自动记录追踪和指标
let user = fetch_user_from_db(user_id).await?;
Ok(user)
}
```
🔧 配置
### 配置示例
```yaml
# config.yaml
service:
name: "my-service"
version: "1.0.0"
logging:
level: "info"
format: "json"
file_enabled: true
console_enabled: true
observability:
metrics_enabled: true
tracing_enabled: true
prometheus_port: 9090
resource:
providers: ["cpu", "gpu", "memory"]
scheduling_policy: "priority_based"
```
### 配置源
DMS 支持多种配置源,按优先级排序(从高到低):
1. 运行时参数
2. 环境变量(以 `DMS_` 为前缀)
3. 配置文件(YAML、TOML、JSON)
4. 默认值
🧪 开发与测试
### 运行测试
```bash
# 运行所有测试
cargo test
# 运行特定测试模块
cargo test cache
# 带详细输出运行
cargo test -- --nocapture
```
❓ 常见问题
**Q: 如何添加新模块?**
A: 实现 `DMSModule` trait 并通过 `DMSAppBuilder::with_module` 注册。
**Q: 如何配置日志级别?**
A: 在配置文件中设置 `logging.level`,支持 DEBUG/INFO/WARN/ERROR 级别。
**Q: 如何启用指标导出?**
A: 在配置文件中设置 `observability.metrics_enabled: true` 并配置 `prometheus_port`。
**Q: 如何扩展配置源?**
A: 实现自定义配置加载器并用 `DMSConfigManager` 注册。
**Q: 如何处理异步任务?**
A: 使用 `DMSAppBuilder::with_async_module` 添加异步模块,框架自动处理异步生命周期。
🌏 社区与引用
- 欢迎提交 Issues 和 PRs!
- Gitee: https://gitee.com/dunimd/dms.git
## 📄 许可证与开源协议
### 🏛️ 项目许可证
本项目使用 **Apache License 2.0** 开源协议,详见 [LICENSE](LICENSE) 文件。
### 📋 依赖包开源协议
本项目使用的开源包及其协议信息:
### 依赖许可证
| 📦 包 | 📜 许可证 |
|:-----------|:-----------|
| serde | Apache 2.0 |
| tokio | MIT |
| prometheus | Apache 2.0 |
| redis | MIT |
| hyper | MIT |
| lapin | Apache 2.0 |
| futures | MIT |
| yaml-rust | MIT |
| toml | MIT |
| etcd-client | MIT |
| sysinfo | MIT |