自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

kitexcall:用 JSON 發(fā)起 RPC 請求的命令行神器

開發(fā) 架構(gòu)
為了簡化開發(fā)者的工作,社區(qū)推出了 kitexcall 這個命令行工具,基于 Kitex 提供的 JSON 泛化調(diào)用,極大地簡化了 Kitex 客戶端的編寫過程。開發(fā)者只需通過簡單的命令行操作,就可以輕松發(fā)起 Kitex 請求,而不再需要編寫繁瑣的代碼。

01、背景

Kitex 是字節(jié)跳動基礎架構(gòu)服務框架團隊推出的 Go 微服務 RPC 框架,支持 Thrift、Kitex Protobuf、gRPC 等消息協(xié)議,具有高性能、強可擴展的特點。Kitex 于 2021 年 9 月正式開源后,已在多家外部企業(yè)成功落地,為他們帶來了真實的成本、性能和穩(wěn)定性收益。然而,對于開發(fā)者來說,有一個痛點是,為了驗證 Server 端代碼,發(fā)起 RPC 測試請求的流程比較繁瑣。

02、痛點

給 Kitex 服務發(fā)送 RPC 測試請求的過程通常包括:1. 生成客戶端代碼:根據(jù) IDL 文件生成 Kitex Client 相關(guān)代碼。2. 構(gòu)造測試請求:構(gòu)建請求、調(diào)用方法、處理響應。3. 配置多種選項:設置傳輸協(xié)議、元信息、異常處理等。這一過程不僅耗時,且在頻繁測試時,每次都需修改和編譯代碼,效率較低。一個能簡化這些步驟、快速發(fā)送 RPC 請求的工具,將大幅提升開發(fā)效率。

03、kitexcall 介紹

詳情可以參考:https://github.com/kitex-contrib/kitexcall

為了簡化開發(fā)者的工作,社區(qū)推出了 kitexcall 這個命令行工具,基于 Kitex 提供的 JSON 泛化調(diào)用,極大地簡化了 Kitex 客戶端的編寫過程。開發(fā)者只需通過簡單的命令行操作,就可以輕松發(fā)起 Kitex 請求,而不再需要編寫繁瑣的代碼。

kitexcall 目前已發(fā)布 v0.1.1 版本,具備以下功能特點:

  • 支持 Thrift/Protobuf:可以處理 Thrift 和 Protobuf 格式的 IDL。
  • 支持多種傳輸協(xié)議:包括 Buffered、TTHeader、Framed、TTHeaderFramed,未來還將支持 gRPC。
  • 靈活的客戶端選項:支持指定常用的客戶端選項,如 client.WithHostPorts。
  • 多種數(shù)據(jù)輸入方式:請求數(shù)據(jù)可以從命令行參數(shù)或本地文件讀取。
  • 元信息傳遞:支持單跳透傳和持續(xù)透傳的元信息,并接收服務器返回的反向透傳元信息。
  • 業(yè)務異常處理:接收并處理業(yè)務自定義的異常錯誤碼和信息。
  • 多種輸出格式:默認輸出人類友好的可讀格式,未來將支持可解析的格式,便于與其他自動化工具集成。

下面,我們通過一個簡單的例子,展示如何使用 kitexcall 發(fā)起一個 Kitex 請求。

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)
}

為方便測試,你可以用如下步驟在本機啟動這個 Echo 服務(默認監(jiān)聽 8888 端口):

$ git clone https://github.com/cloudwego/kitex-examples.git
$ cd kitex-examples/basic/server/
$ go run .
[Info] KITEX: server listen at addr=[::]:8888

使用 kitexcall 發(fā)起請求非常簡單,只要在命令行中指定 IDL 文件、方法名稱、請求報文(JSON 格式)和 Server 地址即可:

kitexcall -idl-path echo.thrift -m echo -d '{"message": "hello"}' -e 127.0.0.1:8888

然后就可以看到 kitexcall 輸出服務端返回的響應報文:

[Status]: Success{ "message": "hello"}

如果你希望從文件中讀入請求數(shù)據(jù),也可以先創(chuàng)建請求數(shù)據(jù)文件 input.json:

{"message": "hello"}

并在 kitexcall 的參數(shù)中用 -f 參數(shù)指定文件名:

kitexcall -idl-path echo.thrift -m echo -f input.json -e 127.0.0.1:8888

05、原理簡介

kitexcall 工具基于 Kitex 提供的 JSON 泛化調(diào)用實現(xiàn)。其原理簡單介紹如下:

1. Descriptor Provider

kitexcall 使用 Kitex 提供的 DescriptorProvider 接口來解析 Thrift 或 Protobuf 的 IDL 文件,獲取服務定義。

2. 泛化對象創(chuàng)建

解析 IDL 文件后,kitexcall 創(chuàng)建泛化對象(如 JSONThriftGeneric 或 JSONPbGeneric),將 JSON 數(shù)據(jù)轉(zhuǎn)換為內(nèi)部請求格式,并將響應數(shù)據(jù)轉(zhuǎn)換回 JSON 格式。

3. 客戶端初始化

kitexcall 使用泛化對象和客戶端選項(如傳輸協(xié)議、元信息處理等)來創(chuàng)建泛化客戶端。該客戶端可以調(diào)用 IDL 文件中定義的任何服務方法。

4. 請求構(gòu)建與發(fā)送

kitexcall 從命令行輸入或文件中讀取 JSON 格式的請求數(shù)據(jù),構(gòu)建請求對象并發(fā)送請求,同時設置傳輸協(xié)議和元信息。

5. 響應處理

接收到響應后,kitexcall 將其格式化為 JSON 并輸出。如果啟用了元信息回傳機制,還會輸出從服務端返回的元信息。

06、未來展望

kitexcall 作為一個社區(qū)驅(qū)動的項目,致力于簡化開發(fā)者使用 Kitex 進行 RPC 調(diào)用的過程。未來,我們計劃在以下幾個方面進行改進和擴展:

1. 計劃支持 gRPC(含基于 gRPC/HTTP2 的 Thrift Streaming)協(xié)議,以適應更多的使用場景。

2. 支持通過服務發(fā)現(xiàn)獲取 Kitex Server 地址。

3. 在 Kitex Server 支持 Reflection 能力之后,kitexcall 將跟進,實現(xiàn)無需 IDL 文件,即可獲取服務詳情和進行服務調(diào)用,使用將會更加便捷。

4. 支持可解析的輸出格式(如 JSON),以便與其他自動化工具集成(例如 CI/CD、IDE 插件等場景)。

歡迎對 Kitex 和 kitexcall 感興趣的開發(fā)者加入社區(qū),共同貢獻代碼和創(chuàng)意。我們相信,在大家的共同努力下,kitexcall 將成為 Kitex 開發(fā)者手中的一把利器,讓微服務開發(fā)變得更加高效和便捷。訪問 github.com/kitex-contrib/kitexcall 了解更多信息,并加入我們吧!

項目地址GitHub:https://github.com/cloudwego

官網(wǎng):www.cloudwego.io

責任編輯:龐桂玉 來源: 字節(jié)跳動技術(shù)團隊
相關(guān)推薦

2012-07-11 13:35:25

UnixLinux

2019-09-09 15:43:29

UnixLinux命令行

2023-03-28 08:40:22

命令行JSON用法

2014-06-17 09:49:07

Ngxtop實時監(jiān)控Nginx

2023-03-01 11:35:45

2021-05-20 12:16:17

Linux命令Axel

2023-12-28 10:44:09

2015-07-01 09:15:46

linuxQuora命令行

2019-12-09 09:23:04

Linux命令sort

2022-02-08 17:19:05

Linux命令grep

2016-03-28 10:00:09

Swift命令程序

2018-05-04 09:15:35

PythonPlumbum命令行

2022-02-08 13:24:49

LinuxLinux命令

2010-11-24 16:35:01

MYSQL命令行

2014-02-12 10:11:08

掃描病毒掃描Clam Antivi

2020-12-10 16:16:08

工具代碼開發(fā)

2020-12-11 06:44:16

命令行工具開發(fā)

2021-08-17 09:35:26

Linux命令Nginx

2022-12-30 08:30:28

Linux命令行json

2010-07-30 13:58:01

命令行GUI
點贊
收藏

51CTO技術(shù)棧公眾號