编程初学者的Go语言学习之旅 | 青训营笔记

250 阅读2分钟

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

kitex框架的安装与使用

Kitex是字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部已广泛使用。如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望定制扩展融入自己的治理体系,Kitex 会是一个不错的选择。

kitex的安装(服务端)

由于kitex的对windows的支持并不完善,这里使用wsl2进行演示。

kitex代码生成工具与thriftgo的安装

进入Ubuntu终端,使用go install命令(在此之前,请确保你已在wsl2中安装go并正确设置了GOPATH环境变量):

go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
 
go install github.com/cloudwego/thriftgo@latest

检验安装:

kitex --version
v0.x.x
thriftgo --version
v0.x.x

定义IDL

接口描述语言(Interface definition language,IDL) 是一种语言的通用术语,它允许用一种语言编写的程序或对象与用未知语言编写的另一个程序进行通信。 我们可以使用 IDL 来支持 RPC 的信息传输定义。Kitex 默认支持 thrift 和 proto3 两种 IDL,而在底层传输上,Kitex 使用扩展的 thrift 作为底层的传输协议。
这里使用thrift举例:
Ubuntu终端中创建并编辑文件:echo.thrift

namespace go api
 
struct Request {
    1: string message
}
 
struct Response {
    1: string message
}
 
service Echo {
    Response echo(1: Request req)
}

以上文件定义了一个回声(Echo)服务,接收一个具有单个字符串的消息,返回同样的消息。

使用go mod tidy

go mod tidy

要注意的一个地方是,github.com/apache/thrift/lib/go/thrift 的 v0.14.0 版本开始提供的 API 和之前的版本是不兼容的,所以要使用thriftgo的0.13版本

go mod edit -replace github.com/apache/thrift=github.com/apache/thrift@v0.13.0

然后使用kitex生成go代码:

kitex -module exmaple -service example echo.thrift

上述命令中,-module 表示生成的该项目的 go module 名,-service 表明我们要生成一个服务端项目,后面紧跟的 example 为该服务的名字。最后一个参数则为该服务的 IDL 文件。生成后的项目结构如下:

.
|-- build.sh
|-- echo.thrift
|-- handler.go
|-- kitex_gen
|   `-- api
|       |-- echo
|       |   |-- client.go
|       |   |-- echo.go
|       |   |-- invoker.go
|       |   `-- server.go
|       |-- echo.go
|       `-- k-echo.go
|-- main.go
`-- script
    |-- bootstrap.sh
    `-- settings.py

使用vim或ide修改handler.go文件,以实现我们的 Echo 服务逻辑:

package main
 
import (
        "context"
        api "exmaple/kitex_gen/api"
)
 
// EchoImpl implements the last service interface defined in the IDL.
type EchoImpl struct{}
 
// Echo implements the EchoImpl interface.
func (s *EchoImpl) Echo(ctx context.Context, req *api.Request) (resp *api.Response, err error) {
        // TODO: Your code here...
        return &api.Response{Message: req.Message}, nil
}

运行 sh build.sh 以进行编译,编译结果会被生成至 output 目录. 最后,运行 sh output/bootstrap.sh 以启动服务。服务会在默认的 8888 端口上开始运行。 出现:

[Info]KITEX:server listen at addr=[::]8888

即成功。

引用

Kitex | CloudWeGo
HikariLan's [Blog](一文学会 Go 的三个主流开发框架| 青训营笔记 - HikariLan's Blog (minecraft.kim))

分发

This work is licensed under CC BY-SA 4.0