Kitex+Gorm框架的初步构建 | 青训营笔记

221 阅读2分钟

这是我参与「第五届青训营」笔记创作活动的第2天

大项目基础架构图

大项目基础架构.png

上次完成了api部分的初步搭建,今天进行user部分的搭建工作。

一、完成user.thrift第一版

参考easy_note项目,设计如下user.thrift

namespace go user

enum ErrCode {
    SuccessCode                = 0
    ServiceErrCode             = 10001
    ParamErrCode               = 10002
    UserAlreadyExistErrCode    = 10003
    AuthorizationFailedErrCode = 10004
}

struct BaseResp {
    1: i64 status_code
    2: string status_message
    3: i64 service_time
}

struct User {
    1: i64 user_id
    2: string username
}

struct CreateUserRequest {
    1: string username (vt.min_size = "1")
    2: string password (vt.min_size = "1")
}

struct CreateUserResponse {
    1: BaseResp base_resp
}

struct MGetUserRequest {
    1: list<i64> user_ids (vt.min_size = "1")
}

struct MGetUserResponse {
    1: list<User> users
    2: BaseResp base_resp
}

struct CheckUserRequest {
    1: string username (vt.min_size = "1")
    2: string password (vt.min_size = "1")
}

struct CheckUserResponse {
    1: i64 user_id
    2: BaseResp base_resp
}

service UserService {
    CreateUserResponse CreateUser(1: CreateUserRequest req)
    MGetUserResponse MGetUser(1: MGetUserRequest req)
    CheckUserResponse CheckUser(1: CheckUserRequest req)
}
  1. user.thrift放在user/idl文件夹下。注意,该项目在wsl2Ubuntu18.04环境下运行。
  2. 在搭建好Kitex脚手架的基础上,还需运行go install github.com/cloudwego/thrift-gen-validator@latest命令,完成对thrift-gen-validator的安装。
  3. user路径下,运行kitex --thrift-plugin validator -module user -service user idl/user.thrift命令。
  4. 运行go mod tidy命令,等待下载。
  5. 观察项目无报错,进行接下来的开发。

二、参考官方提供的easy_note项目,进行工程文件夹的构建

参考链接:biz-demo/easy_note at main · cloudwego/biz-demo (github.com)

user部分文件夹初步构建如下:

image.png
  • dal文件夹包含对数据库进行操作的方法,是直接与数据库进行交互的代码
  • kitex_gen由Kitex脚手架自动生成,里面包含许多可直接使用的对象和方法,如user.CreateUserRequestuser.CreateUserResponse
  • pack文件夹中,user.go用于封装返回的user信息,resp.go用于封装错误信息
  • service文件夹中,三个文件分别对三个服务进行了实现,介于接口和dal之间
  • handler.go文件包含该rpc微服务提供的三个服务,分别是CreateUser, CheckUser, MGetUser,供api部分调用,可以认为是接口实现最顶层的文件
  • main.go文件为主程序,实现了向etcd的register功能