Skip to content

JasonMetal/kratos-develop-template

Repository files navigation

Kratos Develop Template

基于 go-kratos/kratos v2 的企业级微服务脚手架。

架构特点

  • 统一架构: HTTP/gRPC 一次配置,多处复用
  • Protobuf 驱动: API 定义即文档,自动生成代码
  • 依赖注入: Wire 编译期依赖注入,零运行时反射
  • 分层架构: apiservicebizdata 清晰分层
  • 中间件集成: MySQL(GORM) + Redis(go-redis) + Kafka(sarama) + RabbitMQ(amqp091)

目录结构

kratos-develop-template/
├── api/                    # Protobuf API 定义
│   ├── hello/v1/          # Hello 服务
│   ├── kafka/v1/          # Kafka 服务
│   └── rabbitmq/v1/       # RabbitMQ 服务
├── cmd/
│   └── server/            # 服务入口
│       ├── main.go        # 启动入口
│       └── wire.go        # Wire 依赖注入
├── internal/
│   ├── biz/               # 业务逻辑层 (UseCase + Repo 接口)
│   │   ├── site.go        # Site 业务用例
│   │   ├── kafka.go       # Kafka 业务用例
│   │   ├── rabbitmq.go    # RabbitMQ 业务用例
│   │   └── biz.go         # Wire ProviderSet
│   ├── data/              # 数据访问层 (Repo 实现)
│   │   ├── mysql.go       # GORM 连接池
│   │   ├── redis.go       # Redis 连接池
│   │   ├── kafka.go       # Kafka Producer
│   │   ├── kafka_scram.go # Kafka SCRAM 认证
│   │   ├── rabbitmq.go    # RabbitMQ Producer
│   │   ├── site_repo.go   # Site Repo 实现(GORM+Redis缓存)
│   │   ├── kafka_repo.go  # Kafka Repo 实现
│   │   ├── rabbitmq_repo.go # RabbitMQ Repo 实现
│   │   └── data.go        # Wire ProviderSet
│   ├── service/           # 服务实现 (实现 proto 接口)
│   │   ├── hello.go       # Hello 服务
│   │   ├── kafka.go       # Kafka 服务
│   │   ├── rabbitmq.go    # RabbitMQ 服务
│   │   └── service.go     # Wire ProviderSet
│   ├── server/            # 服务器配置
│   │   ├── http.go        # HTTP 服务器
│   │   ├── grpc.go        # gRPC 服务器
│   │   └── server.go      # Wire ProviderSet
│   ├── middleware/        # 中间件
│   └── conf/              # 配置定义 (protobuf 生成)
│       └── conf.proto     # 配置结构体定义
├── configs/                # 多环境配置
│   ├── config.yaml        # 运行时配置(不提交,可能含密钥)
│   ├── config.example.yaml # 示例配置
│   ├── local/             # 本地开发
│   ├── prod/              # 生产环境
│   └── integration/       # 集成测试
├── third_party/           # 第三方 proto 依赖
├── go.mod
├── go.sum
├── Dockerfile
└── Makefile

快速开始

1. 安装依赖

# 安装 protoc 插件
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2@latest
go install github.com/google/wire/cmd/wire@latest

# 下载依赖
go mod tidy

2. 生成代码

# 生成 proto 代码
make generate

# 生成 wire 依赖注入
make wire

3. 构建和运行

# Windows(无 make)
powershell -ExecutionPolicy Bypass -File scripts/generate.ps1
go build -o bin/server ./cmd/server/

# Linux / macOS
make generate && make wire && make build

# 使用 kratos 工具运行(推荐,自动处理工作目录和热重载)
kratos run -- -conf ./configs -e local
kratos run -- -conf ./configs -e prod

# 直接运行二进制
./bin/server -conf=./configs

# 指定环境配置(-e 或 --env,加载 configs/{env}/config.yaml)
./bin/server -e local
./bin/server -e prod

# CLI 定时任务
go build -o bin/task ./cmd/task/

# 交互命令(cobra CLI,支持 -conf/-c 指定配置目录,-e 指定环境)
./bin/task help                                    # 查看帮助
./bin/task                                         # 默认执行 savePageData
./bin/task savePageData                            # 爬数据入库(单次)
./bin/task savePageData -e local                   # 使用 local 环境配置
./bin/task savePageDataCron                        # 爬数据入库(单次运行)
./bin/task savePageDataCron --daemon               # 按 cron 循环运行
./bin/task savePageDataCron -e prod --daemon       # 生产环境循环爬取

# 使用 kratos run 运行 task
kratos run -- -conf ./configs -e local savePageData
kratos run -- -conf ./configs -e prod savePageDataCron --daemon

默认 HTTP 端口 8989(与原 Gin 项目一致),Hello 接口:GET http://127.0.0.1:8989/test

5. 本地中间件(可选)

docker compose up -d
cp configs/config.example.yaml configs/config.yaml   # 按需修改 enabled: true

6. OpenAPI

go install github.com/google/gnostic/cmd/protoc-gen-openapi@latest
make openapi   # 或 scripts/generate.ps1
# 输出: openapi/openapi.yaml

7. 测试与部署

# 单元测试(不依赖 Docker)
go test ./...

# Kafka + RabbitMQ 集成测试(需 Docker Desktop 已启动)
powershell -ExecutionPolicy Bypass -File scripts/integration-test.ps1
# 含 HTTP 接口测试(会临时启动 server)
powershell -ExecutionPolicy Bypass -File scripts/integration-test.ps1 -Http
# Linux / Make
bash scripts/integration-test.sh
make test-integration
# 使用轻量 compose(Redpanda + RabbitMQ,推荐)
docker compose -f docker-compose.integration.yml up -d

# 保持容器运行便于调试
$env:INTEGRATION_LEAVE_UP = "1"
powershell -File scripts/integration-test.ps1

集成测试使用独立配置目录 configs/integration/kafka / rabbitmq 均为 enabled: true),构建标签为 integration,日常 go test ./... 不会执行。

8. 部署

bash scripts/deploy.sh develop kratos-template 8989   # Linux
powershell -File scripts/run-server.ps1                 # Windows

4. Docker

make docker
docker run -p 8000:8000 -p 9000:9000 kratos-develop-template:latest

配置说明

环境配置

项目支持多环境配置,通过 -e--env 指定:

环境 配置目录 说明
local configs/local/ 本地开发(默认)
bvt configs/bvt/ 构建验证测试
test configs/test/ 测试环境
prod configs/prod/ 生产环境
integration configs/integration/ 集成测试(kafka/rabbitmq enabled)
# 加载指定环境配置
./bin/server -e local
./bin/server -e prod
./bin/task -e local savePageData
./bin/task -c ./configs -e test savePageDataCron --daemon

配置项示例

编辑 configs/config.yaml 或对应环境的配置:

server:
  http:
    addr: 0.0.0.0:8000
    timeout: 1s
  grpc:
    addr: 0.0.0.0:9000
    timeout: 1s
data:
  database:
    driver: mysql
    source: user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True
    max_idle_conns: 10
    max_open_conns: 100
  redis:
    addr: 127.0.0.1:6379
    password: ""
    db: 0
  kafka:
    brokers:
      - 127.0.0.1:9092
  rabbitmq:
    url: amqp://guest:guest@127.0.0.1:5672/
    exchange: my_exchange
    exchange_type: direct
    routing_key: my_routing_key

架构对比

维度 原 Gin 项目 Kratos 项目
HTTP/gRPC 两个独立进程 统一进程,多端口
配置 YAML → Viper → Struct Protobuf → protoc 生成 → Struct
依赖注入 手动 NewService() Wire 编译期生成
分层 Controller → Service → Model API → Service → Biz → Data
中间件 全局变量 依赖注入,生命周期管理

中间件集成说明

Kafka / RabbitMQ 集成策略

方案: 自行封装 internal/data/ (而非使用社区 TX7DO/kratos-transport)

原因:

  1. 当前项目主要作为 Producer(发送端),不需要复杂的消费者生命周期
  2. 自行封装更轻量,与 Wire 配合更自然
  3. 如果未来需要 Consumer 能力,可再引入 kratos-transport

社区方案调研:

  • TX7DO/kratos-transport (432 stars): 支持 Kafka/RabbitMQ/RocketMQ 等 10+ MQ,主要面向 Consumer 场景
  • go-kratos/kratos/contrib: 官方未提供 MQ 集成

License

MIT

About

kratos-develop-template

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors