使用Kitex框架构建自己的服务|青训营笔记

简介: 这篇文章主要跟随官方文档给出自己使用Kitex构建一个服务的过程,而后续Kitex更多的特性则需要大家深入学习、实践、总结。

课前资料

课程导学:https://juejin.cn/post/7095977466094682148#heading-31

课程视频:https://live.juejin.cn/4354/yc_teacher

安装Docker/Postman/Git

Kitex学习文档

Kitex[kaɪt’eks]|字节跳动内部的 Golang 微服务RPC 框架

Kitex 框架及命令行工具,默认支持 thriftproto3 两种 IDL,对应的 Kitex 支持 thriftprotobuf 两种序列化协议。传输上 Kitex 使用扩展的 thrift 作为底层的传输协议(注:thrift 既是 IDL 格式,同时也是序列化协议和传输协议)。IDL 全称是 Interface Definition Language,接口定义语言。

体验Kitex编写服务

这部分我将参照Kitex的quick start部分的文档过一下 (quick start文档中先教你运行并扩展一个使用Kitex框架的服务的功能,然后再教你从0开始使用Kitex框架编写自己的服务) ,也会给出一些补充(课中给出Easy Note项目也是一个使用Kitex框架编写完成的服务,比较全,我建议还是先尝试自己从零开始体验一下Kitex的使用,循序渐进,之后再去学习这个项目)

运行一个已有的服务

  • 安装代码生成工具

按照文档中的执行两个go install xxx命令之后,将在自己的$GOPATH/bin路径下找到下载的两个工具

image-20220518112912410

  • 获取示例代码
git clone https://github.com/cloudwego/kitex-examples.git
  • 选择使用Docker快速启动(这里我在本地下载了Docker Desktop,双击运行之后就能获得Docker环境的支持,懒人必备~)

    • docker ps命令表示查询当前正在运行的Docker容器,docker images表示查询当前Docker中的所有镜像

    image-20220518113136387

    • 这里解释一下文档中的docker build -t kitex-examples .命令,它的作用是会默认使用当前目录的Dockerfile进行编译镜像,编译后的镜像名为kitex-examples
    • 这里是根目录下的Dockerfile,声明了Docker构建镜像的步骤

    image-20220518113223245

    • 文档中借助Docker镜像运行客户端实例服务端实例时添加的--network host参数是用于设定容器与宿主共用网络,这样就能从容器中访问宿主网络了,下面是执行两个命令后,客户端的终端不断打印从服务端返回的响应 (这个简单的示例就是一个回声服务,客户端不断向服务端发送message后,服务端返回)

    image-20220518113354274

为这个服务添加功能

这一步按照文档中的步骤操作即可,大致的流程如下:

  1. 修改hello.thrift文件增加一个求和方法
  2. 使用Kitex工具编译这个文件之后,会为客户端和服务端各自创建一套调用体系,服务端负责实现生成的接口,自定义功能实现;客户端通过调用生成的方法就可以实现和服务端的通信(好像在调用本地的方法,这也是RPC远程过程调用的意义之一)
  3. 重新运行server端和client端的程序,这里文档中没有再重新打包docker镜像,而是直接在本地跑两个程序,比较方便image-20220518113436410

编写自己的服务

  • 创建项目目录,这里按照文档步骤即可
mkdir example
cd example
  • 安装与更新Kitex工具,完成后输入kitex如果如文档中所说显示command not found,可能是因为没有把 $GOPATH/bin 加入到 $PATH

环境变量配置参看这篇文章:https://blog.csdn.net/a1056244734/article/details/121861743

  • 编写IDL,并使用Kitex工具生成项目代码,下面是注意点
// 若当前目录不在 $GOPATH/src 下,需要加上 -module 参数,一般为 go.mod 下的名字
 kitex -module example -service example echo.thrift
  • 编写echo服务逻辑,编译运行服务端的时候如果遇到如下问题:

image-20220518143235085

解决方案:https://github.com/cloudwego/kitex/issues/447(感谢群里的同学)

  • 编写客户端代码并运行
func main() {
   c, err := echo.NewClient("example", client.WithHostPorts("0.0.0.0:8888"))
   if err != nil {
      log.Fatal(err)
   }
   req := &api.Request{Message: "my request 啦啦啦"}
   resp, err := c.Echo(context.Background(), req, callopt.WithRPCTimeout(3*time.Second))
   if err != nil {
      log.Fatal(err)
   }
   log.Println(resp)
}

image-20220518143716939

后续提升

通过Quick Start部分快速体验了一下Kitex框架构建服务的流程,后续的学习我建议是结合Kitex文档Easy Note的demo进行强化学习,深入学习Kitex的各种特性。

相关文章
|
Arthas Kubernetes 数据可视化
推荐10个GitHub上适合练手的后端项目(涵盖初中高阶)
上周,我们推出了26个好玩又有挑战的前端练习项目。 不少同学留言说,那后端的呢?后端也要! 淘系工程师一呼就应,我们邀请了2位淘系技术后端工程师,筛选出10个难度层层递进,好玩且实用的后端项目,包含java类库中的“瑞士军刀”工具、可视化API展现等等,难度依然分为【初级篇:4个】、【中级篇:3个】、【高级篇:3个】,不同学习诉求的同学可按需选择~
|
1月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
5月前
|
中间件 API 开发者
Bottle框架探秘:如何用几行代码搅动Web开发江湖?
【8月更文挑战第31天】Bottle是一个仅依赖Python标准库的轻量级Web开发微框架,无需额外依赖,简化部署与维护。它以简洁高效著称,适合快速构建Web应用。通过简单的示例即可上手,如用几行代码实现“Hello World”应用。除基础功能外,Bottle还支持模板渲染、会话管理和表单处理等,适用于学习及小型项目,也能在高性能要求的应用中展现价值。无论是新手还是有经验的开发者,Bottle都是高效Web开发的理想选择。
54 1
|
5月前
|
C# 开发者 Windows
勇敢迈出第一步:手把手教你如何在WPF开源项目中贡献你的第一行代码,从选择项目到提交PR的全过程解析与实战技巧分享
【8月更文挑战第31天】本文指导您如何在Windows Presentation Foundation(WPF)相关的开源项目中贡献代码。无论您是初学者还是有经验的开发者,参与这类项目都能加深对WPF框架的理解并拓展职业履历。文章推荐了一些适合入门的项目如MvvmLight和MahApps.Metro,并详细介绍了从选择项目、设置开发环境到提交代码的全过程。通过具体示例,如添加按钮点击事件处理程序,帮助您迈出第一步。此外,还强调了提交Pull Request时保持专业沟通的重要性。参与开源不仅能提升技能,还能促进社区交流。
56 0
|
5月前
|
存储 前端开发 JavaScript
前端语言串讲 | 青训营笔记
前端语言串讲 | 青训营笔记
55 0
|
8月前
|
IDE 测试技术 Go
【字节跳动青训营】后端笔记整理-3 | Go语言工程实践之测试
用于验证已经修改或新增功能后,软件的既有功能是否受到影响。
136 2
|
8月前
|
Java 编译器 Go
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(一)
本文主要梳理自第六届字节跳动青训营(后端组)-Go语言原理与实践第一节(王克纯老师主讲)。
213 1
|
8月前
|
存储 Go C++
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(二)
Go 语言中的复合数据类型包括数组、切片(slice)、映射(map)和结构体(struct)。
86 0
|
8月前
|
存储 JSON Java
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(三)
在 Go 语言里,符合语言习惯的做法是使用一个单独的返回值来传递错误信息。
106 0
|
XML IDE 编译器
【C++】C++ 基础进阶【二】开发技巧
C++基础进阶,关于开发环境开发工具的一些便捷使用方式,提高生产力
173 0
【C++】C++ 基础进阶【二】开发技巧

热门文章

最新文章