这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
接上一次笔记
Kitex框架
3 IDL, CodeGeneration
- 定义了每个 RPC接口的 包信息,struct (request,response)
- 定义了一个 servcice(一个微服务的方法集合,处理上面定义的RPC包
(in IDL
通过代码生成
IDL -- thriftgo + kitex --> auto code
(in kitex_gen/notedemo(这里的包名,是由idl定义的,namespace go notedemo
idl 中 noteservcie 本身是一个嵌套结构,所以生成代码时要生成一个嵌套包,包含对 service 的实现,包括:
- 接口的所有方法
- client, server 的RPC端
(in kitex_gen/notedemo/noteservcie
(自动生成的 noteservcie.client 接口,供 api client 使用,包括:
- 创建 rpc client 的方法
- 调用service的各个方法
(自动生成的 noteservcie.server
- 只包含创建 rpc server 的方法
对于rpc server端 (in dir: kitex_gen/notedemo
- noteservcie 的具体实现在 handler.go ===》 Note服务
- 启动server,配置扩展,在 main.go ===》Note RPC
Note服务
\
服务抽象(in kitex_gen
分析
- 每一个服务方法,对应一对儿 RPC包信息 (req, resp)(由struct 实现
- 自动生成会创建 interface,以及具体实现(handlers.go
服务的实现(in cmd/note/handler.go
kitex自动生成代码所暴露出来的interface的具体实现,这里,impl struct实现了interface的所有方法,所以隐式实现了接口
服务对接数据库(db/note.go
- 使用 gorm + database 为底层实现
初始化全局对象DB,用来操作数据库的读写 gorm需要定义一个表对象,TableName则是定义了表名,可进行自动推导