这是我参与「第五届青训营」伴学笔记创作活动的第6天
RPC(Remote Procedure Call)远程过程调用
在微服务的设计中,如果一个服务A访问另一个模块下的服务B,它可以使用HTTP REST来传输数据,并在两个服务之间序列化和[反序列化],服务B返回执行结果。
由于HTTP是在应用层完成的,整个通信的开销相对较高。在远程过程调用中,直接基于TCP进行远程调用,数据传输在传输层TCP层完成,更适合对效率要求较高的场景。RPC主要依赖于在客户端和服务器端之间建立Socket链接。底层实现比REST更复杂。
kitex框架简介
kitex框架是一个基于thrift的RPC框架。它是一种基于微服务的体系结构设计,继承了微服务体系结构的各个组件和功能。
IDL
我们通常用IDL来定义服务,它能够针对性的对代码进行生成操作,采用IDL生成接口的用法比较常见。
Kitex生成client端代码
- 通过bulid.sh构建脚本
- kitex_gen:IDL内容相关的生成代码,主要是基础的Server/Client代码
- main.go 程序入口
- handler.go 用户在该文件里实现 IDLservice定义的方法 默认占用8080端口监听
创建client
import "example/kitex_gen/api/echo"
import "github.com/cloudwego/kitex/client"
...
c, err := echo.NewClient("example", client.WithHostPorts("0.0.0.0:8888"))
if err != nil {
log.Fatal(err)
}
发起请求
import "example/kitex_gen/api"
...
req := &api.Request{Message: "my request"}
resp, err := c.Echo(context.Background(), req, callopt.WithRPCTimeout(3*time.Second))
if err != nil {
log.Fatal(err)
}
log.Println(resp)
总结
KiteX是一个高性能、高度可扩展的Go RPC框架。除了丰富的服务治理特性外,与其他框架相比,它还具有以下特点:集成了自主开发的网络库Netpoll。支持多消息协议(Thrift, Protobuf)和多交互模式(乒乓,单向,流式)。提供更灵活和可扩展的代码生成器