kitex 入门和基于grpc的使用

CloudWeGo-Kitex学习 Kitex的基本教程 阅读详情
在这里插入图片描述

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。
📗本文收录于kitex系列,大家有兴趣的可以看一看
📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看
📙Java并发编程系列,设计模式系列、go web开发框架 系列正在发展中,喜欢Java,GoLang,Rust,的朋友们可以关注一下哦!


概述

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

架构设计

在这里插入图片描述

框架特点

  • 高性能
    使用自研的高性能网络库 Netpoll,性能相较 go net 具有显著优势。
  • 扩展性
    提供了较多的扩展接口以及默认扩展实现,使用者也可以根据需要自行定制扩展,具体见下面的框架扩展。
  • 多消息协议
    RPC 消息协议默认支持 Thrift、Kitex Protobuf、gRPC。Thrift 支持 Buffered 和 Framed 二进制协议;Kitex Protobuf 是 Kitex 自定义的 Protobuf 消息协议,协议格式类似 Thrift;gRPC 是对 gRPC 消息协议的支持,可以与 gRPC 互通。除此之外,使用者也可以扩展自己的消息协议。
  • 多传输协议
    传输协议封装消息协议进行 RPC 互通,传输协议可以额外透传元信息,用于服务治理,Kitex 支持的传输协议有 TTHeader、HTTP2。TTHeader 可以和 Thrift、Kitex Protobuf 结合使用;HTTP2 目前主要是结合 gRPC 协议使用,后续也会支持 Thrift。
  • 多种消息类型
    支持 PingPong、Oneway、双向 Streaming。其中 Oneway 目前只对 Thrift 协议支持,双向 Streaming 只对 gRPC 支持,后续会考虑支持 Thrift 的双向 Streaming。
  • 服务治理
    支持服务注册/发现、负载均衡、熔断、限流、重试、监控、链路跟踪、日志、诊断等服务治理模块,大部分均已提供默认扩展,使用者可选择集成。
  • 代码生成
    Kitex 内置代码生成工具,可支持生成 Thrift、Protobuf 以及脚手架代码。

环境

代码生成工具

确保已经安装GoLang环境。

Kitex 中使用到的代码生成工具包括 IDL 编译器, protobuf 编译器,kitex tool。

IDL 编译器

IDL 编译器能够解析 IDL 并生成对应的序列化和反序列化代码,Kitex 支持 Thrift 和 protobuf 这两种 IDL,这两种 IDL 的解析分别依赖于 thriftgo 与 protoc。

安装IDL编译器

安装 thriftgo,执行以下命令即可:

go install github.com/cloudwego/thriftgo@latest

安装成功后,执行 thriftgo --version 可以看到具体版本号的输出:

thriftgo --version

thriftgo 0.3.6

protobuf 执行以下命令即可:

go install github.com/golang/protobuf/proto

安装成功后,执行 protoc --version 可以看到具体版本号的输出:

protoc --version

libprotoc 23.0

kitex tool

kitex 是 Kitex 框架提供的用于生成代码的一个命令行工具。目前,kitex 支持 thrift 和 protobuf 的 IDL,并支持生成一个服务端项目的骨架。kitex 的使用需要依赖于 IDL 编译器确保你已经完成 IDL 编译器的安装。

执行以下命令:

go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
安装成功后,执行 kitex --version 可以看到具体版本号的输出:

kitex --version

v0.8.0

基础教程

首先我们我们创建一个名叫mykitex的文件,然后在命令行运行以下命令初始化模块。

go mod init mykitex

然后在根目录创建idl文件夹。
然后创建以下文件添加以下内容。

一般不同的服务都会使用不同的 IDL,所以我们这里创建 item.thrift 与 stock.thrift 分别定义商品服务与库存服务的接口,同时创建 base.thrift 定义公共数据结构。

base.proto

syntax = "proto3";
// 设置生成类的包路径
package base;

// 输出路径;
option go_package = "example/shop/base";



// 设置基础结构体
message BaseResp{
    string code=1;
    string msg=2;
}

item.proto

syntax = "proto3";
package item;
// 第一个分割参数,输出路径;第二个设置生成类的包路径

option go_package = "example/shop/item";
// 引入公共文件
import "idl/base.proto";
// 所有字段默认必填,

message Item {
int64 id=1;
string title=2;
string description=3;
int64 stock=4;
}

message GetItemReq {
  int64 id=1;
}

message GetItemResp {
 Item item=1;
base.BaseResp baseResp=255;
}

service ItemService{
   rpc GetItem(GetItemReq) returns (GetItemResp);
}


stock.proto

syntax = "proto3";
package item;
// 第一个分割参数,输出路径;第二个设置生成类的包路径
option go_package = "example/shop/stock";
// 引入公共文件
import "idl/base.proto";

// 设置服务名称
message GetItemStockReq {
  int64 item_id = 1;
}

message GetItemStockResp {
  int64 stock = 1;

  base.BaseResp base_resp = 255; // 在 protobuf 中,字段名应遵循小写字母和下划线的命名规范
}

service StockService {
  rpc GetItemStock(GetItemStockReq) returns (GetItemStockResp);
}

代码生成

有了 IDL 以后我们便可以通过 kitex 工具生成项目代码了,我们在先回到项目的根目录即 example_shop。因为我们有两个 IDL 定义了服务,所以执行两次 kitex 命令:

kitex -module mykitex idl/item.proto

kitex -module mykitex idl/stock.proto

生成的代码分两部分,一部分是结构体的编解码序列化代码,由 IDL 编译器生成;另一部分由 kitex 工具在前者产物上叠加,生成用于创建和发起 RPC 调用的桩代码。它们默认都在 kitex_gen 目录下。

上面生成的代码并不能直接运行,需要自己完成 NewClient 和 NewServer 的构建。kitex 命令行工具提供了 -service 参数能直接生成带有脚手架的代码,接下来让我们为商品服务和库存服务分别生成脚手架。

首先为两个 RPC 服务分别单独创建目录。

mkdir -p rpc/item rpc/stock

再分别进入各自的目录中,执行如下命令生成代码:

// item 目录下执行
kitex -module mykitex -service example.shop.item -use mykitex/kitex_gen -I ../../  ../../idl/item.proto  

// stock 目录下执行
kitex -module mykitex -service example.shop.item -use mykitex/kitex_gen 
GRPC之Kitex框架案例入门详解 kitex作为字节跳动主要GRPC框架 阅读详情

相关推荐

Kitex 框架入门系列(1)

KiteX 是字节跳动框架组研发的下一代高性能、强可扩展性的 Go RPC 框架。目前已经在 Github 开源。作为字节跳动内部原有的 RPC 框架 Kite 的升级版,虽然开源时间不是很长,但其实从性能和扩展性上来说都已经在字节上万微服务的场景下做了充分的验证。近期花了一些时间简单看了看源码,被整体的框架设计和扩展性深深吸引。希望能够单独开一个系列,带大家一起熟悉Kitex的使用,通过源码了解其提供的能力,学习整体的设计。作为入门系列第一篇,今天我们先来看看如何上手。

m0_73849256的博客 2164

字节跳动 Go RPC 框架 KiteX 性能优化实践

外链图片转存中…(img-hQWdwdDk-1712396160582)]

2401_84132176的博客 1197

Hertz+Kitex快速上手开发

本篇文章介绍了hertz+kitex快速上手的开发,演示了hertz框架结合kitex框架实现网关+微服务架构的最简易版本

pedestrian_h的博客 1534

后端领域Kitex的多语言支持情况

Kitex如何实现跨语言服务调用支持的语言范围及其实现原理多语言环境下的最佳实践研究范围涵盖Kitex v0.4.0及以上版本,重点分析其与Go、Java、Python、C++等主流语言的互操作性。文章首先介绍Kitex的基本概念,然后深入多语言支持的架构设计,接着通过代码示例展示具体实现,最后讨论实际应用和未来趋势。Kitex:字节跳动开源的高性能RPC框架Thrift:跨语言的接口定义语言和RPC框架gRPC:Google开发的高性能RPC框架IDL。

架构师的AI之路,分享AI应用开发架构的学习与实践。 1142

汽车底盘技术解析:从悬架调校到智能化,如何评价国产车底盘实力

汽车底盘作为决定车辆驾驶质感、安全性和耐久性的核心系统,其技术内涵远不止于悬架结构。从行驶系、转向系到制动系的协同工作,底盘调校是一门融合机械原理与工程实践的艺术。在电动化与智能化浪潮下,底盘技术正经历从被动适应到主动响应的变革,CDC可变阻尼减震器和空气悬架等技术的应用,让底盘具备了通过OTA升级实现性能优化的可能。国产汽车品牌如奇瑞、吉利等,通过平台化架构研发与调校经验积累,正推动底盘技术从“能用”向“好用”乃至“塑造独特驾驶风格”迈进。理解底盘技术,需超越简单的结构对比,关注其在实际路况中的滤震性、支

weixin_34413103的博客 387

VMware Workstation Pro必备技巧:5分钟搞定Ubuntu虚拟机磁盘瘦身(附常见错误解决)

本文详细介绍了如何为VMware Workstation Pro中的Ubuntu虚拟机进行磁盘瘦身,解决.vmdk文件只增不减的问题。通过清理系统垃圾、使用零填充空闲空间,并利用vmware-toolbox-cmd或vmware-vdiskmanager工具进行压缩,可有效回收被无效占用的磁盘空间。文章还提供了常见错误解决方案和预防性维护建议,帮助用户高效管理虚拟机存储。

sea99的博客 300

新手必看!Unity中Tag和Layer的7个实际应用场景(含MOBA案例)

本文深入探讨Unity中Tag和Layer的7个实际应用场景,特别以MOBA游戏开发为例,详细解析如何利用LayerMask进行高效场景管理和碰撞检测优化。从双相机方案到射线检测的精准控制,帮助开发者掌握这些基础功能的进阶用法,提升游戏性能和开发效率。

weixin_28723171的博客 313

【华为OD技术面试真题 - 技术面】- 测试面试题(1)

专栏:华为OD面试真题精选 目录: 2024华为OD面试手撕代码真题目录以及八股文真题目录黑盒测试:白盒测试:基本功能验证:边界条件测试:空白输入测试:特殊字符和格式测试:响应时间测试:压力测试:针对在不同系统和设备上测试聊天窗口功能,以及网络正常的前置条件,我们可以增加以下测试用例:系统和设备:PC端测试:移动端测试:功能验证:前置条件:网络性能影响测试:Postman:SoapUI:JMeter:Rest-Assured:Tricentis Tosca:ReadyAPI:CI/CD工具集成:测试管理工

算法大师! 3691

【20260309】【亲测可用】【异常】Get https://registry-1.docker.io/v2/: net/http: request canceled

【异常】Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection。

奶爸的编程之路,也就一周冷个三天 2万+

lammps教程:MS转data文件出错原因分析及解决办法

使用ms建模是lammps建模的一种重要方法,但是ms建模转换为data过程中经常会出现各种各样的错误。 ms模型转data文件流程分两部分,一是ms建模、forcite设置力场并导出car文件,二是msi2lmp将car转为data文件。 任何一个环节出错都会导致无法得到data文件,最容易出错的是forcite力场设置环节。 forcite力场设置出错原因有很多,一个原因是缺乏某类原子的力场参数。 msi2lmp软件只能转换cvff或pcff力场的car文件,因此,如果力场中不包含某类原子的参数,在设置

lammps_jiayou的博客 5062

智能车图像处理5-入门级分析4 ---环岛的状态机与补线

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 8267

【PSINS工具箱】159联邦滤波器代码优化与注释、运行结果、文字性解释。15维状态量、9维观测量,联邦滤波与集中式滤波对比。完整代码可订阅后查看

基于工具箱的联邦滤波代码,15维状态量、9为观测量

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 487

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: Ainx框架基础路由模块
下一篇: MongoDB 快速入门
过去日记
过去日记 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄3年 5343粉丝 225原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过去日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值