首页 > 其他分享 >kitex使用系列(一):kitex的安装与快速启动

kitex使用系列(一):kitex的安装与快速启动

时间:2022-11-24 00:00:13浏览次数:65  
标签:系列 err echo go 服务 安装 gen kitex

kitex介绍

kitex是字节跳动内部使用的Golang微服务RPC框架。具有高性能、强可扩展的特点。

kitex使用字节跳动自研的Netpoll网络库,比go net的性能更高,这也是kitex高性能的一个原因。

kitex采用了模块化的设计,在整个服务框架的基础上,将可以替换的内容全部抽象为扩展接口并提供了默认的实现。一般情况下,用户使用默认实现即可,必要的话,用户可以按照自己的需要来自行实现扩展接口。

kitex官网的架构图如下:
image

可以看到对于微服务治理,kitex提供了服务注册、服务发现、负载均衡、监控等等扩展。为用户提供了很大程度的自由。

除此之外,kitex还提供了工具来帮助用户来提升开发效率。

接下来就使用kitex来快速实现一个简单的服务,来看看kitex是如何使用的吧。

kitex快速启动

安装

golang环境的安装这里就不加赘述了,按照golang官网的教程来即可。不过kitex对于golang有如下要求:

  1. 推荐使用最新版本的golang,kitex保证兼容罪行的三个正式版本。
  2. 确保打开go.mod

然后执行下面的命令即可安装kitex

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

安装完成后,可以检测一下是否安装成功

$ kitex --version
v0.4.2

kitex支持thrift和protobuf两种序列化协议,用户只需要编写好对应IDL文件,然后生成对应的协议文件,就可以快速生成接口的定义以及通信的代码。
这里需要为thrift和protobuf安装编译器

  • thrift的安装比较简单,执行下面的内容即可
# 安装thriftgo
go install github.com/cloudwego/thriftgo@latest
  • protoc的安装要麻烦一些,可以在protoc下载源码包编译构建,也可以直接下载对应的二进制文件。然后安装下面的go插件。
# 安装protoc-gen-go/protoc-gen-go-grpc
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

因为个人在工作中使用的是protobuf,所以本教程始终以protobuf作为序列化协议

接下来就可以使用kitex正是编写代码了。

服务编写

创建项目

创建一个项目目录并进入

mkdir echo && cd echo

编写IDL文件

在这里定义我们的服务

syntax = "proto3";

package echo;

option go_package = "api";

message Request {
    string message = 1;
}

message Response {
    string message = 1;
}

service Echo {
    rpc Echo(Request) returns (Response);
}

生成服务代码

执行如下命令

kitex -module echo -service echo echo.proto
  • -module表示生成项目的go module名
  • -service表示生成一个服务端项目,后面紧跟的echo是服务的名字
  • 最后的echo.proto就是使用的IDL的文件

生成的项目结构如下所示

.
├── build.sh
├── echo.proto
├── go.mod
├── go.sum
├── handler.go
├── kitex_gen
│   └── api
│       ├── echo
│       │   ├── client.go
│       │   ├── echo.go
│       │   ├── invoker.go
│       │   └── server.go
│       ├── echo.pb.fast.go
│       └── echo.pb.go
├── main.go
└── script
    └── bootstrap.sh

可以看到proto生成的代码在kitex_gen目录下,并且路径与go_package中的一致。

顺便提一下,在编写proto文件的时候要非常注意,go_package的路径最终一定要在kitex_gen路径下,否则运行上面的命令生成代码会报错
就是说:

  • 如果是非绝对路径也不是以.开头的路径,那么默认就是生成在kitex_gen目录下
  • 绝对路径要保证路径为 {当前项目根路径}/kitex_gen/xxx/xxx
  • 不要使用.开头的路径写法

如果使用的protoc的版本较新的话,会要求go_package一定要包含.或者/,所以为了避免出错,也为了简单,最好直接使用api/xxx类型格式的路径。

编写逻辑代码

生成的代码已经为我们搭建好的服务框架,对于我们用户来说,需要做的也就是编写handler.go文件下的实现逻辑。

现在这个文件的内容应该如下所示:

package main

import (
	"context"
	echo "echo/kitex_gen/api/echo"
)

// EchoImpl implements the last service interface defined in the IDL.
type EchoImpl struct{}

// Echo implements the EchoImpl interface.
func (s *EchoImpl) Echo(ctx context.Context, req *echo.Request) (resp *echo.Response, err error) {
	// TODO: Your code here...
	return
}

我们简单实现以下Echo方法即可

func (s *EchoImpl) Echo(ctx context.Context, req *echo.Request) (resp *echo.Response, err error) {
	return &echo.Response{Message: req.Message}, nil
}

运行服务

kitex帮我们生成好了编译和运行需要的脚本。

运行build.sh,会在output目录下生成编译产物

sh build.sh

运行服务

sh output/bootstrap.sh

现在服务就已经启动了。

编写客户端

为了测试刚刚运行的服务端程序,我们来编写一个简单的客户端程序

mkdir client && cd client
touch main.go

实现客户端程序


func main() {
	c, err := echo.NewClient("echo", client.WithHostPorts("0.0.0.0:8888"))
	if err != nil {
		log.Fatal(err)
	}
	req := &api.Request{Message: "hello, kitex"}
	resp, err := c.Echo(context.Background(), req, callopt.WithRPCTimeout(3*time.Second))
	if err != nil {
		log.Fatal(err)
	}
	log.Println(resp)
}

上面代码中的echo.NewClient就是用来创建客户端的,第一个参数就是调用的服务名,其实就是前面生成服务代码的时候 -service后面跟着的服务名。

直接运行客户端代码,就可以看到响应的结果了。使用kitex框架开发服务的流程就介绍完毕了。

标签:系列,err,echo,go,服务,安装,gen,kitex
From: https://www.cnblogs.com/smarticen/p/16920540.html

相关文章

  • OpenStack OTACA版本安装-2.认证服务
    1.用数据库连接客户端以 root 用户连接到数据库服务器:$mysql-uroot-p2.创建 keystone 数据库:MariaDB[(none)]>CREATEDATABASEkeystone;3.对``keystone......
  • 1、RocketMQ(安装与测试)
    1、RocketMQ(安装与测试)本文编写时间:2022年11月23日Version:RocketMQ4.8版本虚拟机:2核4GJDK:1.832位下载......
  • rpm环境安装dpkg包管理工具
    rpm环境安装dpkg包管理工具索引:dpkg-scanpackages、dpkg、dpkg-query、dpkg-source、dpkg-scansource在centos、redhat、麒麟服务器版本中想对deb包进行管理,那么就需......
  • 在Ubuntu Linux上安装Deb文件的三种方法
    https://zhuanlan.zhihu.com/p/339632982?ivk_sa=1024320u方法一:在.deb文件夹下(应该是Downloads文件夹),双击.deb文件方法二:使用Gdebi应用程序来安装deb软件包及其依赖项......
  • OpenStack OTACA版本安装-1.配置环境
    1.准备CentOS主机主机名:controller角色:控制节点IP:10.0.0.11内存:4G主机名:compute1角色 :计算节点IP:10.0.0.31内存:2G注:主机之间配置host解析2.......
  • scrcpy macos 编译安装最新版 1.2.4
    概况:看官网发布日志,新版加了还少新的特性。尝试了直接用brewinstall,upgrade 等方法,都没有装成。查了一下原因homebrew 目前只提供1.18的版本。要装新的目前只能......
  • CST仿真技术组件和系统设计的电磁仿真安装教程
    CST2020WIN1064位安装步骤:1.先使用“百度网盘客户端”下载CST20_EN_x32安装包到电脑磁盘根目录或英文路径文件夹下,并鼠标右击进行解压缩,然后双击打开CST_Studio_Suite_2......
  • 重学c#系列——逆变和协变[二十四]
    前言简单整理一下逆变和协变。正文什么是逆变和协变呢?首先逆变和协变都是术语。协变表示能够使用比原始指定的派生类型的派生程度更大的类型。逆变表示能够使用比原......
  • ratel安装
    ratel安装注意之前的版本写command和args的时候,格式为:sh,,,-c,,,sleep36000新版写法为:sh,,,-c,,,sleep36000也就是把换行从,,,改成了,,,+回车,为了......
  • #yyds干货盘点#【愚公系列】2022年11月 微信小程序-地图的使用之API相关函数案例
    前言地图基础属性:属性类型默认值必填说明最低版本longitudenumber是中心经度1.0.0latitudenumber是中心纬度1.0.0scalenumber16否缩放......