Kratos 框架核心特性
井云服务中心后端基于 Go 语言和 Kratos v2 微服务框架构建。Kratos 是一个轻量级的 Go 微服务框架,包含大量微服务相关框架及工具,帮助开发者快速构建微服务系统。本文档介绍 Kratos 框架的核心特性及其在井云项目中的应用。
📋 特性概览
Kratos 框架提供了完整的微服务开发工具链,包括以下核心特性:
| 特性 | 说明 | 项目 应用 |
|---|---|---|
| APIs | HTTP/gRPC 协议通信,通过 Protobuf 定义 | 所有服务接口定义 |
| Errors | Protobuf Enum 错误码定义,工具生成判定接口 | 统一错误处理 |
| Metadata | Middleware 规范化服务元信息传递 | 租户ID、用户ID传递 |
| Config | 多数据源配置合并,Atomic 动态配置支持 | Consul 配置中心 |
| Logger | 标准日志接口,支持三方 log 库集成 | 结构化日志输出 |
| Metrics | 统一指标接口,默认集成 Prometheus | 服务监控指标 |
| Tracing | 遵循 OpenTelemetry 规范 | 分布式链路追踪 |
| Encoding | Accept/Content-Type 自动编码选择 | JSON/Protobuf 支持 |
| Transport | 统一 HTTP/gRPC 传输层,Middleware 插件 | 认证、限流、CORS |
| Registry | 统一注册中心接口,插件化对接 | Consul 服务注册 |
| Validation | Protobuf 统一校验规则,适用于 HTTP/gRPC | 请求参数验证 |
| SwaggerAPI | 自动生成 Swagger API 文档和 UI | OpenAPI 文档生成 |
🔌 APIs - 协议通信
特性说明
Kratos 支持通过 Protocol Buffers 定义 API 接口,同时支持 HTTP 和 gRPC 双协议:
- 统一定义: 使用
.proto文件定义服务接口和消息类型 - 双协议支持: 同一份定义可生成 HTTP 和 gRPC 服务代码
- 类型安全: 编译时类型检查,避免运行时错误
- 代码生成: 自动生成客户端和服务端代码
项目应用
在井云项目中,所有微服务的 API 接口都通过 Protobuf 定义:
// 示例:用户服务 API 定义
service UserService {
rpc CreateUser(CreateUserRequest) returns (CreateUserReply) {
option (google.api.http) = {
post: "/v1/users"
body: "*"
};
}
rpc GetUser(GetUserRequest) returns (GetUserReply) {
option (google.api.http) = {
get: "/v1/users/{id}"
};
}
}
实现位置:
- Gateway 服务:
/backend/services/gateway/api/*.proto - 各微服务:
/backend/services/{service}/api/*.proto
代码生成命令:
make api # 生成 API 代码(.pb.go, _grpc.pb.go, _http.pb.go)