前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Kitex构建自己的服务|青训营笔记

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

作者头像
白泽z
发布2022-08-18 14:24:54
7410
发布2022-08-18 14:24:54
举报
文章被收录于专栏:Go与云原生开发Go与云原生开发

课前资料

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

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

安装Docker/Postman/Git

  • 安装 Minikube 或 Docker Desktop 启动Docker 安装教程
  • 安装 Postman客户端 或者 网页版Postman
  • 安装 Git 可以按照 廖雪峰的Git教程

Kitex学习文档

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

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

  • 因为涉及到微服务相关的知识点,这里需要先对微服务的意义,以及服务之间的通信方式有所了解,推荐先看一篇RPC框架选型的文章,里面包括GRPCThriftDubboSpring Cloud这4种常用的RPC框架,讲述了每种框架的原理,还有示例,非常适合入门学习:RPC框架介绍与选型
  • Thrift IDL 语法可参考:Thrift interface description language。
  • proto3 语法可参考:Language Guide(proto3)。
  • Kitex的文档地址:https://www.cloudwego.io/zh/docs/kitex/getting-started/
  • Gorm的文档地址:https://gorm.cn/zh_CN/docs/index.html
  • 了解etcd(服务注册与发现)与opentracing(链路追踪)
  • 一个非常好用的开源SSH终端 Electerm:https://github.com/electerm/electerm

体验Kitex编写服务

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

运行一个已有的服务

  • 安装代码生成工具

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

  • 获取示例代码
代码语言:javascript
复制
git clone https://github.com/cloudwego/kitex-examples.git
  • 选择使用Docker快速启动(这里我在本地下载了Docker Desktop,双击运行之后就能获得Docker环境的支持,懒人必备~)
  • 文档中借助Docker镜像运行客户端实例服务端实例时添加的--network host参数是用于设定容器与宿主共用网络,这样就能从容器中访问宿主网络了,下面是执行两个命令后,客户端的终端不断打印从服务端返回的响应 (这个简单的示例就是一个回声服务,客户端不断向服务端发送message后,服务端返回)
  • 这里解释一下文档中的docker build -t kitex-examples .命令,它的作用是会默认使用当前目录的Dockerfile进行编译镜像,编译后的镜像名为kitex-examples
  • 这里是根目录下的Dockerfile,声明了Docker构建镜像的步骤
  • docker ps命令表示查询当前正在运行的Docker容器,docker images表示查询当前Docker中的所有镜像

为这个服务添加功能

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

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

编写自己的服务

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

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

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

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

  • 编写客户端代码并运行
代码语言:javascript
复制
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)
}

后续提升

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员白泽 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 课前资料
    • 安装Docker/Postman/Git
      • Kitex学习文档
      • 体验Kitex编写服务
        • 运行一个已有的服务
          • 为这个服务添加功能
            • 编写自己的服务
            • 后续提升
            相关产品与服务
            容器镜像服务
            容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档