作者:张哲(github: Zzhiter),Kitexcall 作者
01
背景
02
痛点
03
kitexcall 介绍
详情可以参考:https://github.com/kitex-contrib/kitexcall
为了简化开发者的工作,社区推出了 kitexcall 这个命令行工具,基于 Kitex 提供的 JSON 泛化调用,极大地简化了 Kitex 客户端的编写过程。开发者只需通过简单的命令行操作,就可以轻松发起 Kitex 请求,而不再需要编写繁琐的代码。
kitexcall 目前已发布 v0.1.1 版本,具备以下功能特点:
04
使用示例
首先安装 kitexcall 命令行工具:
go install github.com/kitex-contrib/kitexcall@latest
以 github.com/cloudwego/kitex-examples 的 Echo 服务为例,将其 IDL 文件保存为 echo.thrift。
namespace go api
struct Request {
1: string message
}
struct Response {
1: string message
}
service Echo {
Response Echo(1: Request req)
}
$ git clone https://github.com/cloudwego/kitex-examples.git
$ cd kitex-examples/basic/server/
$ go run .
[Info] KITEX: server listen at addr=[::]:8888
使用 kitexcall 发起请求非常简单,只要在命令行中指定 IDL 文件、方法名称、请求报文(JSON 格式)和 Server 地址即可:
kitexcall -idl-path echo.thrift -m echo -d '{"message": "hello"}' -e 127.0.0.1:8888
然后就可以看到 kitexcall 输出服务端返回的响应报文:
[Status]: Success
{
"message": "hello"
}
如果你希望从文件中读入请求数据,也可以先创建请求数据文件 input.json:
{"message": "hello"}
并在 kitexcall 的参数中用 -f 参数指定文件名:
kitexcall -idl-path echo.thrift -m echo -f input.json -e 127.0.0.1:8888
05
原理简介
kitexcall 工具基于 Kitex 提供的 JSON 泛化调用实现。其原理简单介绍如下:
1. Descriptor Provider
kitexcall 使用 Kitex 提供的 DescriptorProvider 接口来解析 Thrift 或 Protobuf 的 IDL 文件,获取服务定义。
2. 泛化对象创建
解析 IDL 文件后,kitexcall 创建泛化对象(如 JSONThriftGeneric 或 JSONPbGeneric),将 JSON 数据转换为内部请求格式,并将响应数据转换回 JSON 格式。
3. 客户端初始化
kitexcall 使用泛化对象和客户端选项(如传输协议、元信息处理等)来创建泛化客户端。该客户端可以调用 IDL 文件中定义的任何服务方法。
4. 请求构建与发送
kitexcall 从命令行输入或文件中读取 JSON 格式的请求数据,构建请求对象并发送请求,同时设置传输协议和元信息。
06
未来展望
1. 计划支持 gRPC(含基于 gRPC/HTTP2 的 Thrift Streaming)协议,以适应更多的使用场景。
2. 支持通过服务发现获取 Kitex Server 地址。
3. 在 Kitex Server 支持 Reflection 能力之后,kitexcall 将跟进,实现无需 IDL 文件,即可获取服务详情和进行服务调用,使用将会更加便捷。
4. 支持可解析的输出格式(如 JSON),以便与其他自动化工具集成(例如 CI/CD、IDE 插件等场景)。
欢迎对 Kitex 和 kitexcall 感兴趣的开发者加入社区,共同贡献代码和创意。我们相信,在大家的共同努力下,kitexcall 将成为 Kitex 开发者手中的一把利器,让微服务开发变得更加高效和便捷。访问 github.com/kitex-contrib/kitexcall 了解更多信息,并加入我们吧!