这是我参与「第五届青训营 」笔记创作活动的第4天
一、本文内容:
-
Kitex的简单流程
-
Hertz的简单流程
二、详细介绍
首先,新建一个项目文件夹,进入文件夹后使用go mod命令进行依赖管理,然后新建两个文件夹,分别用于存放Kitex代码和hertz代码,使用代码如下:
mkdir kitex-hertz-demo
cd kitex-hertz-demo/
go mod init kitex-hertz-demo
mkdir kitex-demo
mkdir hertz-demo
进行完上述步骤后,此时kitex-hertz-demo文件夹下应该有一个文件go.mod和两个空文件夹kitex-demo和hertz-demo
Kitex的简单流程
接口描述语言(Interface definition language,IDL) 是一种语言的通用术语,它允许用一种语言编写的程序或对象与用未知语言编写的另一个程序进行通信。 我们可以使用 IDL 来支持 RPC 的信息传输定义。Kitex 默认支持 thrift 和 proto3 两种 IDL。
Thrift IDL 语法可参考:Thrift interface description language。
proto3 语法可参考:Language Guide(proto3)。
此次我们使用thrift来定义IDL。新建文件echoHello.thrift,并下如下代码:
namespace go api
struct Request {
1: string message
}
struct Response {
1: string message
}
service Echo {
Response echo(1: Request req)
}
以上文件定义了一个回声(Echo)服务,接收一个具有单个字符串的消息,返回同样的消息+Hello。
接下来,使用以下指令为我们的回声服务生成代码:
kitex -module kitex-hertz-demo -service exmapleHello echoHello.thrift
上述命令中,-module 表示生成的该项目的 go module 名,-service 表明我们要生成一个服务端项目,后面紧跟的 example 为该服务的名字。最后一个参数则为该服务的 IDL 文件。生成后的项目结构如下:
├── build.sh
├── echoHello.thrift
├── handler.go
├── kitex_gen
│ └── api
│ ├── echo
│ │ ├── client.go
│ │ ├── echo.go
│ │ ├── invoker.go
│ │ └── server.go
│ ├── echoHello.go
│ ├── k-consts.go
│ └── k-echoHello.go
├── kitex.yaml
├── main.go
└── script
└── bootstrap.sh
10 directories, 16 files
其中 build.sh 为构建脚本,kitex_gen 为 IDL 内容相关的生成代码,main.go 为程序入口,handler.go 可由用户在此文件内实现 IDL service 定义的方法。
我编写一个输出原文+“Hello World”的方法:
return &api.Response{Message: req.Message + "Hello World!"}, nil
运行 sh build.sh 以进行编译,编译结果会被生成至 output 目录.
最后,运行 sh output/bootstrap.sh 以启动服务。服务会在默认的 8888 端口上开始运行。
接下来,我们通过创建一个客户端来调用我们的服务。具体代码可以参考kitex教程。
接下来使用go run命令就可以以客户端身份发送请求了。
本文如有不足之处,欢迎大家指出