第二件 PRC| 青训营

184 阅读2分钟

go框架三件套

第二件 PRC -- Kitex

文档地址:www.cloudwego.io/zh/docs/kit…

1.安装kitex代码生成工具

这里没什么好说的,但是kitex对Window支持不完善,本地开发建议用虚拟机或者WSL2,框架地址

安装 kitex:go install github.com/cloudwego/kitex/tool/cmd/kitex@latest

安装 thriftgo:go install github.com/cloudwego/thriftgo@latest

安装完成后使用kitex -version 显示版本号即为安装成功

2.定义IDL

如果要进行RPC,就需要知道对方的接口是什么,需要传什么参数,也需要知道返回值。这时候需要IDL来约定双方的协议,就像在写代码的时候需要调用某个函数,就需要知道函数的签名一样(直接在下面结构体中更改即可)

namespace go api

struct Request {
    1:string message
}

struct Response {
    1: string message
}

service Echo {
    Response echo(1:Request req)
}
3.Kitex生成代码

使用 kitex -module example -service example echo.thrift命令生成代码(会生成一个树结构,这里很像linux)

build.sh:构建脚本

kitex_gen:IDL内容相关的生成代码,主要是基础的Server/Client代码

main.go:程序入口

handler.go:用户在该文件里实现IDL service定义的方法

4.kitex的基础使用

在handler.go中实现(server端),下面是handler.go的代码,默认监听8888端口

package main

import(
    "context"
    "example/kitex_gen/api"
)
//定义
type EchoImpl struct{}
//接口
func (s *EchoImpl) Echo(ctx context.Context,req *api.Response,err error){
    //TODO : Your code here
    return
}

Client端

import "example/kitex_gen/api/echo"
import "github.com/couldwego.kitex/client"
...
c,err := echo.NewClient("example",clientWithHostPorts("0.0.0.0:8888"))
if err != nil {
    log.fatal(err)
}

发起请求

import "example/kitex_gen/api"
...
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)
5.kitex服务注册与发行

目前kitex的服务注册与发现已经对接了主流了服务注册与发现中心,如ETCD,Nscos等

这里会另开一篇文章去写,专门讲解,写完后这里会附上文档地址

6.kitex生态

各种扩展地址:www.cloudwego.io/zh/docs/kit…

题外话:现在很多公司都会使用这种类似的代码生成框架,我现在实习就是20多个前端页面直接生成器生成出来就可以了,然后把前端简单的逻辑丢给我来执行和改bug,也就导致前端人员疯狂缩水,因此不想被替代还是要自身硬才可以

吐槽:注册那边代码也太多了,而且逻辑性很强,为了保住这篇算数,会另开一个,估计代码会比较多,我会尽量弄懂并且理解出来,今天刚画完20来个页面,明天又有新项目,这次要我带一个新人全栈开发了哈哈(明明我也是新人)