easy-note环境安装及运行|青训营笔记

341 阅读4分钟

这是我参与「第三届青训营-后端场」笔记创作活动的第6篇笔记。

0.课前准备

代码地址: https://github.com/cloudwego/kitex-examples

kitex教程: https://www.cloudwego.io/zh/docs/kitex/getting-started/

为什么找不到kitex命令

按教程中export的方法只能对当前终端的环境生效。查看当前PATH的配置路径:echo $PATH。同理使用echo $GOPATH也只有使用export的终端有输出。

解决方法1(推荐):编辑 ~/.bashrc文件,在末尾追加export指令。新开启的终端直接生效,更改前开启的终端使用输入source .bashrc后生效。此方法能改变当前用户的PATH路径且永久生效。

解决方案2:编辑/etc/profile文件,在末尾追加export指令。重启系统后对所有用户永久生效。

安装Docker

ubuntu系统,可用curl -sSL https://get.daocloud.io/docker|sh自动安装。 之后使用sudo docker run hello-world检测是否运行成功。输出的最后两行为

    For more examples and ideas,visit:
     https://docs.docker.com/get-started/

错误:

W: GPG 错误:https://apt.kitware.com/ubuntu focal-rc InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 6AF7F09730B3F0A4

E: 仓库 “https://apt.kitware.com/ubuntu focal-rc InRelease” 没有数字签名。

解决方法:先获取公钥,再进行安装。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6AF7F09730B3F0A4

安装postman

如果snap没有命令则执行sudo apt-get install snapd。这是ubuntu的软件商店。

执行sudo snap install postman即可。

点击左下角"显示应用程序",然后搜索postman即可打开。

安装git

sudo apt install git

1. 介绍

kitex

kitex通过编写接口生成服务代码。

生成后的文件如下:

kitex_gen包含生成的客户端、服务端代码。main.go为启动文件。handler.go为我们要编写的业务文件代码。script为启动脚本的模板。build.sh是构建要运行的产物。

thrift的v0.14.0较v0.13.0有较大变化,所以需要固定版本为v0.13.0。

gorm

gorm的first,take,last返回1条记录,若没有记录则返回ErrRecordNotFound。

使用struct更新时,默认只更新非零值字段。若想更新零值,应适用select或map。

etcd和opentracing

etcd主要用于服务发现和服务注册。

opentracing主要用于链路追踪和相关的可观测性。

项目介绍

在代码的./bizdemo目录下

服务模块介绍:

服务名称模块介绍技术框架传输协议注册中心链路追踪
demoapiAPI服务Gorm,Kitex,Ginhttpetcdopentracing
demouser用户数据管理Gorm,Kitexprotobuf或thriftetcdopentracing
demonote笔记数据管理Gorm,Kitexthriftetcdopentracing

项目服务调用关系:

2022-05-15 14-08-21 的屏幕截图.png

api不会直接和mysql交互, 而是由demouser操作mysql用户数据,demonote操作mysql笔记数据。demouser和demonote会将服务信息(ip、端口号、服务名称等)注册到ETCD,api通过服务发现发现ETCD中的服务信息,于是可以通过ip和端口对用户数据后笔记数据发起请求。

模块功能介绍:

2022-05-15 14-16-33 的屏幕截图.png

项目技术栈:

2022-05-15 14-17-27 的屏幕截图.png

相关资料

框架文档地址 github地址 拓展文档
RPC框架Kitex 框架文档

www.cloudwego.io/zh/docs/kit…

github.com/cloudwego/k…
Kitex-etcd扩展github.com/kitex-contr…github.com/kitex-contr… www.cloudwego.io/zh/docs/kit… www.cloudwego.io/zh/docs/kit…
Kitex-OpenTracing扩展www.cloudwego.io/zh/docs/kit…github.com/kitex-contr…- www.cloudwego.io/zh/docs/kit…
ORM框架Gorm 教程

gorm.cn/zh_CN/

github.com/go-gorm/gor…
Gorm-Opentracing扩展

github.com/go-gorm/ope…

github.com/go-gorm/ope…gorm.cn/zh_CN/docs/…
HTTP框架Gin 框架

github.com/gin-gonic/g…

github.com/gin-gonic/g…
Gin-JWT扩展

github.com/appleboy/gi…

github.com/appleboy/gi…

demonote接口

BaseResp是通用参数。

CreateNoteResponse CreateNote(1:CreateNoteRequest req)//创建
MGetNoteResponse MGetNote(1:MGetNoteRequest req)//批量通过笔记id,批量获取笔记数据
DeleteNoteResponse DeleteNote(1:DeleteNoteRequest req)//批量笔记
QueryNoteResponse QueryNote(1:QueryNoteRequest req)//查询笔记
UpdateNoteResponse UpdateNote(1:UpdateNoteRequest req)//更新笔记

demouser接口

rpc CreateUser (CreateUserRequest) returns (CreateUserResponse) {}//创建用户
rpc MGetUser (MGetUserRequest) returns (MGetUserResponse) {}//获取用户数据
rpc CheckUser (CheckUserRequest) returns (CheckUserResponse) {}//判断用户登录

kitex_gen目录

避免重复生成代码。

error

  • 每个错误有一个编码。
  • 逻辑错误和系统错误分开返回

Middleware扩展

  1. 中间件和套件都只允许在初始化的时候设置,不允许动态修改。
  2. 后设置覆盖先设置。

bound

完成请求级别或连接级别的限流。

3.编写代码

使用.proto文件生成代码需要额外参数,从./cmd中的Makefile可以看到。

note/dal/init.go文件数据库初始化

DB, err = form.Open(mysql.Open(constants.MySQLDefaultDSN),
    &gorm.Config{
        PrepareStmt:            true,//缓存预编译的SQL,提高效率
        SkipDefaultTransaction: true,//使用hook或gorm的关联创建数据时建议使用默认事务,
                                     //最好使用false以保证数据一致性;其它场景可用true。
    },
)

note/dal/note.go文件创建笔记函数

if err := DB.WithContext(ctx).Create(notes).Error; err != nil {
    return err
}
return nil

//错误写法,Create会创建并返回一个新的实例,以下写法没有获得新实例的err
conn := DB
conn.WithContext(ctx).Create(notes)
if conn.Error != nil {
    return err
}
return nil

使用

  1. 按readme中步骤运行服务器。
  2. 打开postman当作客户端。
  3. postman创建阶段,选择POST方法,后面URL写全,Body选择raw,后面有个下拉栏选JSON,下面文本填大括号中的内容。点击Send即可。
  4. readme中命令的--header需要填到postman的headers中(json相关的可以不用填,因为上一步设置过),以为分界线,前面填到key中,后面填到value中。