X-One
开箱即用的 Rust 三方库集成框架
功能特性
- 统一集成三方库(Axum、Sqlx、Moka、Reqwest、OpenTelemetry),降低维护成本
- 通过 YAML 配置启用能力,开箱即用
- 提供最佳实践的默认参数配置
- 支持 Hook 机制,灵活扩展生命周期
- 集成 OpenTelemetry 链路追踪,日志自动关联 TraceID
环境要求
- Rust edition 2024(rustc >= 1.85)
快速开始
1. 安装
[]
= "0.2"
= { = "1", = ["full"] }
= "0.8"
2. 创建配置文件
创建 application.yml(支持放置在 ./、./conf/、./config/ 目录下):
Server:
Name: "my-service"
Version: "v1.0.0"
XAxum:
Port: 8000
XLog:
Level: "info"
Console: true
XOrm:
Driver: "mysql"
DSN: "mysql://user:password@127.0.0.1:3306/dbname"
XHttp:
Timeout: "30s"
RetryCount: 3
XCache:
MaxCapacity: 100000
DefaultTTL: "5m"
3. 配置 Schema 校验(可选)
项目提供了 JSON Schema 文件,配置后 IDE 会自动补全字段并校验配置值。
VS Code(需安装 YAML 扩展)
在 YAML 文件首行添加:
# yaml-language-server: $schema=https://raw.githubusercontent.com/xiaoshicae/x-one/main/config_schema.json
或在项目 .vscode/settings.json 中统一配置:
JetBrains(RustRover / IntelliJ)
Settings → Languages & Frameworks → Schemas and DTDs → JSON Schema Mappings,添加映射:
- Schema URL:
https://raw.githubusercontent.com/xiaoshicae/x-one/main/config_schema.json - Schema version:JSON Schema version 7
- 文件匹配:
application*.yml
4. 启动服务
use ;
use XAxum;
async
启动后框架会自动完成:配置加载 → 链路追踪初始化 → 日志初始化 → HTTP 客户端初始化 → 数据库连接 → 启动 Axum 服务。
模块清单
| 模块 | 底层库 | 说明 | Log | Trace |
|---|---|---|---|---|
| xconfig | serde_yaml | 配置管理(YAML + 环境变量 + Profile) | - | - |
| xlog | tracing | 结构化日志(文件轮转 + KV 注入) | - | - |
| xtrace | opentelemetry | 链路追踪(W3C Trace Context) | - | - |
| xhttp | reqwest | HTTP 客户端(重试 + 连接池) | - | - |
| xorm | sqlx | 数据库(MySQL / PostgreSQL,多数据源) | - | - |
| xcache | moka | 本地缓存(支持 TTL / 泛型) | - | - |
| xserver | - | 服务运行和生命周期管理 | - | - |
| xaxum | axum | Axum Web 框架集成(Builder 模式 + 内置中间件) | - | - |
| xflow | - | 流程编排(顺序执行 + 强/弱依赖 + 自动逆序回滚) | - | - |
服务启动方式
use HookOptions;
use XAxum;
use get;
async
使用模块
日志
use ;
// 基础日志(自动注入 trace_id / span_id)
xlog_info!;
// 结构化 KV
xlog_info!;
HTTP 客户端
use xhttp;
// 发起 GET 请求
let resp = get.send.await?;
// 发起 POST 请求
let resp = post
.json
.send
.await?;
配置示例:
XHttp:
Timeout: "30s"
RetryCount: 3
MaxIdleConnsPerHost: 100
数据库
use xorm;
// 获取连接池(默认实例)
let pool = db;
// 多数据源
let master = db_by_name;
let slave = db_by_name;
单数据库配置:
XOrm:
Driver: "mysql"
DSN: "mysql://user:pass@127.0.0.1:3306/mydb"
MaxOpenConns: 50
EnableLog: true
SlowThreshold: "3s"
多数据库配置:
XOrm:
- Name: "master"
Driver: "mysql"
DSN: "mysql://user:pass@127.0.0.1:3306/master_db"
- Name: "slave"
Driver: "postgres"
DSN: "postgres://postgres@127.0.0.1:5432/slave_db"
本地缓存
use xcache;
use Duration;
// 设置缓存
set;
// 带 TTL
set_with_ttl;
// 获取缓存(泛型)
let val: = get;
自定义配置
use xconfig;
// 读取单个值
let port: = get_int;
let name: = get_string;
// 反序列化到结构体
let cfg: MyAppConfig = parse_config.unwrap;
链路追踪
use xtrace;
// xhttp、xorm、xlog 会自动关联 TraceID,一般无需手动操作
// 如需手动创建 Span:
let tracer = tracer;
配置示例:
XTrace:
Enable: true
Console: false # 仅调试时开启控制台输出
生命周期 Hook
use HookOptions;
// 服务启动前执行(在所有模块初始化之后)
before_start!;
// 服务停止前执行
before_stop!;
也可手动控制生命周期:
// 手动初始化所有模块
init.await?;
// 你的业务逻辑...
// 手动清理
shutdown.ok;
多环境配置
通过 Profile 加载不同环境的配置文件:
# application.yml(公共配置)
Server:
Name: "my-service"
Profiles:
Active: "dev" # 指定环境
框架会按顺序加载:application.yml → application-dev.yml,后者覆盖前者同名配置。
也可通过环境变量指定:
环境变量
| 环境变量 | 说明 | 示例 |
|---|---|---|
SERVER_ENABLE_DEBUG |
启用框架内部调试日志 | true |
SERVER_PROFILES_ACTIVE |
指定激活的配置环境 | dev, prod |
SERVER_CONFIG_LOCATION |
指定配置文件路径 | /app/config.yml |
配置文件支持环境变量占位符(带默认值):
XOrm:
DSN: "${DB_DSN:-mysql://user:pass@localhost:3306/db}"
完整配置参考
Server:
Name: "my-service" # 服务名(必填)
Version: "v1.0.0" # 版本号(默认 v0.0.1)
Profiles:
Active: "dev" # 环境标识
XAxum:
Host: "0.0.0.0" # 监听地址(默认 0.0.0.0)
Port: 8000 # 监听端口(默认 8000)
UseHttp2: false # 启用 h2c(默认 false)
EnableBanner: true # 打印启动 Banner(默认 true)
XLog:
Level: "info" # 日志级别(默认 info)
Console: true # 控制台打印(默认 false)
Path: "./log/" # 日志文件夹(默认 ./log/)
MaxAge: "7d" # 日志保留时长(默认 7d)
RotateTime: "1d" # 切割周期(默认 1d)
XTrace:
Enable: true # 启用链路追踪(默认 true)
Console: false # 控制台打印(默认 false)
XHttp:
Timeout: "30s" # 请求超时(默认 30s)
RetryCount: 3 # 重试次数(默认 0)
MaxIdleConnsPerHost: 100 # 每 host 最大空闲连接(默认 100)
XOrm:
Driver: "postgres" # 驱动(默认 postgres)
DSN: "" # 连接字符串(必填)
MaxOpenConns: 100 # 最大连接数(默认 100)
EnableLog: true # 开启 SQL 日志(默认 true)
SlowThreshold: "200ms" # 慢查询阈值(默认 200ms)
XCache:
MaxCapacity: 100000 # 最大条目数(默认 100000)
DefaultTTL: "5m" # 默认 TTL(默认 5m)
更新日志
- v0.4.0 (2026-03-15) - 新增 xredis/xpipeline/xmetric 模块,补充 xutil(net/pool/future)、xaxum 中间件(recover/session/metric)、xflow FlowData 容器
- v0.3.0 (2026-02-11) - 新增 xflow 流程编排模块(顺序执行 + 强/弱依赖 + 自动逆序回滚 + 零开销 Monitor)
- v0.2.11 (2026-02-11) - 改善 hook debug 日志(显示函数名代替文件路径)
- v0.2.10 (2026-02-11) - 重命名 debug 环境变量(SERVER_ENABLE_DEBUG → XONE_ENABLE_DEBUG)
- v0.2.9 (2026-02-11) - 优化 xhttp/xaxum 热路径性能(减少每请求堆分配、零分配比较、复用 Builder)
- v0.2.8 (2026-02-11) - 优化 .claude 配置(新增 agents 知识库、对齐 skills、完善 README 和 Schema)
- v0.2.7 (2026-02-10) - 发布到 crates.io
- v0.2.6 (2026-02-10) - 美化启动 Banner(雾蓝→淡紫渐变色)+ 清理未使用导入
- v0.2.5 (2026-02-10) - 回退日志中间件异步 spawn(高 QPS 下调度开销大于格式化开销),保留同步优化
- v0.2.4 (2026-02-10) - 日志中间件性能优化(手动 JSON 拼接、不缓冲响应 body)+ 全局 pub 可见性治理
- v0.2.2 (2026-02-10) - 完善 /publish 发布流程(版本 tag 检测)
- v0.2.1 (2026-02-10) - 修复 graceful shutdown 被绕过、profile 合并丢失 Server 配置、空字符串 Duration 解析绕过默认值
- v0.2.0 (2026-02-10) - xaxum 支持 h2c (HTTP/2 cleartext)、日志增加 caller/threadName 字段、HTTP 请求耗时人性化显示、幂等 Hook 注册
- v0.1.0 (2026-02-10) - 初始版本,11 个模块(xconfig, xlog, xtrace, xhttp, xorm, xcache, xaxum, xhook, xserver, xutil, error)