FreeCar 是一个基于 Hertz 与 Kitex 的全栈微服务项目,欢迎 Star。
项目地址:CyanAsterisk/FreeCar
Hertz:cloudwego/hertz
技术栈
- HTTP 框架使用 Hertz
- RPC 框架使用 Kitex
- 数据库使用 MongoDB、MySQL
- 配置中心与服务注册与发现使用 Nacos
- 消息队列使用 RabbitMQ
- Jaeger 与 Prometheus 进行链路追踪以及监控(通过 OpenTelemetry 进行使用)
- Limiter 中间件进行限流
- 使用 docker-compose 部署
- 使用腾讯云 COS 对象存储服务
- CI 使用 GitHub Actions
项目架构
调用关系
技术架构
服务关系
页面展示
目录介绍
目录 | 介绍 |
---|---|
Server | 项目核心部分 |
Shared | 可复用代码 |
Static | 微信小程序代码 |
服务介绍
目录 | 介绍 |
---|---|
API | 基于 Hertz 的网关服务 |
Auth | 用户认证服务 |
Blob | 与图片和腾讯云 COS 相关的服务 |
Car | 汽车服务 |
Profile | 主页与图片识别服务 |
Trip | 行程服务 |
快速开始
启动基础环境
make start
复制代码
配置 Nacos
在浏览器上访问
http://127.0.0.1:8848/nacos/index.html#/login
进行登录。默认命名空间以及配置组等请参考各个
config.yaml
配置文件。
关于配置中心的详细配置,详见。
生成数据表
make migrate
复制代码
启动 HTTP 服务
make api
复制代码
启动微服务
make auth
make blob
make car
make profile
make trip
复制代码
Jaeger
在浏览器上访问
http://127.0.0.1:16686/
Prometheus
在浏览器上访问
http://127.0.0.1:3000/
API 请求
项目的 API 请求示例详见。
开发指南
通过直接阅读源码来了解此项目是非常困难的,在此提供开发指南方便开发者快速了解并上手此项目包括 Kitex、Hertz 等框架。
前置准备
通过快速开始中的命令快速启动所需的工具与环境,若需要特殊定制请修改 docker-compose.yaml
与 Nacos 配置中的内容。
IDL
在开发之前我们需要定义好 IDL 文件,其中 hz 为开发者提供了许多定制化的 api 注解。
示例代码:
namespace go auth
struct LoginRequest {
1: string code
}
struct LoginResponse {
1: i64 accountID
}
service AuthService {
LoginResponse Login(1: LoginRequest req)
}
复制代码
代码生成
Kitex
在新增服务目录下执行,每次仅需更改服务名与 IDL 路径。
服务端
kitex -service auth -module github.com/CyanAsterisk/FreeCar ./../../idl/auth.thrift
复制代码
客户端
kitex -module github.com/CyanAsterisk/FreeCar ./../../idl/auth.thrift
复制代码
注意项:
- 用
-module github.com/CyanAsterisk/FreeCar
该参数用于指定生成代码所属的 Go 模块,避免路径问题。 - 当前服务需要调用其他服务时需生成客户端文件。
Hertz
初始化
hz new -idl ./../../idl/api.proto -mod github.com/CyanAsterisk/FreeCar/server/cmd/api
复制代码
更新
hz update -I -idl ./../../idl/api.proto
复制代码
注意项:
- 用
-module github.com/CyanAsterisk/FreeCar/server/cmd/api
该参数用于指定生成代码所属的 Go 模块,避免路径问题。
业务开发
在代码生成完毕后需要先将一些必须组件添加到项目中。由于 api 层不必再次添加,因此以下主要讲解关于 Kitex-Server 部分,代码位于 server/cmd
下。
Config
参考 server/cmd/auth/config
,为微服务的配置结构体。
Global
参考 server/cmd/auth/global
,为微服务提供可全局调用的方法。
Initialize
参考 server/cmd/auth/initialize
,提供必要组件的初始化功能,其中 nacos.go
flag.go
logger.go
为必须项。
Tool
参考 server/cmd/auth/tool
,提供微服务的工具函数,其中 port.go
为必须项。
API
在写网关层的业务逻辑时,仅需要每次更新 IDL 与新的微服务客户端代码,若需要添加新的组件直接添加即可,项目高度可拔插,架构与微服务层相似。
网关层的业务逻辑在 server/cmd/api/biz
下,大部分代码会自动生成。若需要单独新增路由需要到 server/cmd/api/router.go
中。
关于中间件的使用,只需要在 server/cmd/api/biz/router/api/middleware.go
中添加中间件逻辑。
许可证
FreeCar 在 Apache 许可证 2.0 版下开源。
总结
这个项目还是花费的不少时间,欢迎大家学习,如果 Star 是对我们最大的鼓励!