作用
在RPC(Remote Procedure Call,远程过程调用)中,IDL(Interface Definition Language,接口定义语言)扮演着至关重要的角色,其主要作用如下:
1. 定义服务接口
IDL 用于定义服务的接口规范,包括:
- 服务方法的名称。
- 每个方法的输入参数类型及其名称。
- 方法的返回值类型。
- 异常或错误的约定(可选)。
通过 IDL,服务的提供者和消费者可以共享相同的接口描述,从而确保两者之间通信的正确性和一致性。
生成代码
生成代码的指令
本来还是有Kitex框架 和Hertz框架为头的生成kitex server ....但是之后推出的cwgo覆盖了这个两个,通过type来控制生成哪个的生成代码(应该是这样吧)
--type RPC就是Kitex框架,--type HTTP就是Hertz框架
cwgo server -I "../../idl" --type RPC --module "github.com/Violet2314/tiktok_e-commence/demo/demo_proto" --idl "../../idl/echo.proto" --service demo_proto
生成代码的结构
kitex_gen 目录
这是由 cwgo 根据 IDL 文件生成的代码,通常包含:
- 客户端和服务端的存根代码(放在 <服务名称>service 中)
- 客户端存根: 用于客户端调用 RPC 接口。
client.go - 服务端存根: 服务端用于处理请求并调用实际业务逻辑。
server.go - 服务的方法定义和调用逻辑
authservice.go - 注册或初始化客户端/服务端组件
invoker.go
- 客户端存根: 用于客户端调用 RPC 接口。
- IDL 定义的类型映射: 如结构体、枚举类型等,用于序列化和反序列化。
echo.pb.go就是这样的一个映射结构体,里面的结构体对应的就是一个message - 同时Kitex 生成
echo.pb.fast.go文件,是依赖于echo.pb.go,提供更高效的序列化和反序列化实现(“fast” 意味着性能优化)。主要依赖fastpb库,专为高性能场景设计
conf 目录
通常存放服务的配置文件,包括:
- 数据库连接信息。
- 日志配置。
- 服务注册中心的地址(如 Nacos、Etcd)。
- 自定义配置(如超时时间、限流参数)。
biz 目录
存放核心的业务逻辑代码,比如:
- 数据库的访问层(DAO层)。
- 服务的业务实现层(Service层)。
- 工具类或中间层代码。
- 初始化代码
handler.go
- 作用: 用于实现具体的业务逻辑。
- Kitex 服务启动时会调用这个文件中定义的处理函数,将 RPC 请求转发到业务逻辑处理函数中
结构特点
RPC是只有三层架构的,handler,service,dao层,是没有controller层的,所以他和传统的web框架不一样
- Controller:在传统 Web 框架中,controller 负责路由和请求分发,决定请求的处理方法,并且处理 HTTP 请求和响应的协议层面内容。
- Handler:在
Kitex这类 RPC 框架中,handler 层实现了服务端暴露的接口方法,接收从客户端发送的 RPC 请求并调用对应的业务逻辑(service层),然后返回结果