kitex-example easynote源码分析(下) | 青训营笔记

63 阅读1分钟

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

接上一次笔记

Kitex框架

3 IDL, CodeGeneration

  • 定义了每个 RPC接口的 包信息,struct (request,response)
  • 定义了一个 servcice(一个微服务的方法集合,处理上面定义的RPC包

(in IDL image-20230210222402948.png

通过代码生成

IDL -- thriftgo + kitex --> auto code

(in kitex_gen/notedemo(这里的包名,是由idl定义的,namespace go notedemo

image-20230210222607213.png

idl 中 noteservcie 本身是一个嵌套结构,所以生成代码时要生成一个嵌套包,包含对 service 的实现,包括:

  • 接口的所有方法
  • client, server 的RPC端

(in kitex_gen/notedemo/noteservcie

image-20230210223018607.png

(自动生成的 noteservcie.client 接口,供 api client 使用,包括:

  • 创建 rpc client 的方法
  • 调用service的各个方法

(自动生成的 noteservcie.server

  • 只包含创建 rpc server 的方法

image-20230210222821373.png

对于rpc server端 (in dir: kitex_gen/notedemo

  • noteservcie 的具体实现在 handler.go ===》 Note服务
  • 启动server,配置扩展,在 main.go ===》Note RPC

Note服务

\

服务抽象(in kitex_gen

image-20230210223116855.png 分析

  • 每一个服务方法,对应一对儿 RPC包信息 (req, resp)(由struct 实现
  • 自动生成会创建 interface,以及具体实现(handlers.go

服务的实现(in cmd/note/handler.go

kitex自动生成代码所暴露出来的interface的具体实现,这里,impl struct实现了interface的所有方法,所以隐式实现了接口

image-20230210223154763.png

服务对接数据库(db/note.go

  • 使用 gorm + database 为底层实现

    初始化全局对象DB,用来操作数据库的读写 gorm需要定义一个表对象,TableName则是定义了表名,可进行自动推导

image-20230210223215673.png