这是我参与「第五届青训营」伴学笔记创作活动的第6天
Kitex:rpc操作
对方接口、参数、返回值 KiteX 是字节跳动框架组研发的下一代高性能、强可扩展性的 Go RPC 框架。目前已经在 Github 开源。作为字节跳动内部原有的 RPC 框架 Kite 的升级版,虽然开源时间不是很长,但其实从性能和扩展性上来说都已经在字节上万微服务的场景下做了充分的验证。
1.定义IDL——服务和接口
namespace go api
struct Request {
1:string message
}
struct Response{
1:string message
}
service Echo{
Response echo(1: request req)
}
2.Kitex生成代码
kitex -module example -service example echo.thrift
3.Kitex 基本使用
package main
import (
"context"
"example/kitex_gen/api"
)
type EchoImpl struct{}
func (s * EchoImpl) Echo(ctx ontext.Context,req *api.Request)(resp * api.Response,err error){
return
}
Hertz:api服务
基本使用
package main
import(
...
)
func main(){
h := server.Default(server.WithHostPorts("127.0.0.1:8080"))
h.GET("/ping",func(c context.Context,ctx *app.RequestContext){
ctx.JSON(context.StatusOK,utils.H("ping":"pong"))
})
h.Spin()//开启自旋
}
路由
分组路由
参数路由
通配路由
优先级:静态路由>命名路由>通配路由
//参数路由——:version
h.GET("hertz/:version",func(ctx context.Context, c *app.ReuqestContext){
version := c.Param("version")
c.String(consts.StatusOK,"Hello %s",version)
})
//通配路由——*action匹配更多(/v1/v2)都可以被获取
h.GET("hertz/:version/*action",func(ctx context.Context, c *app.ReuqestContext){
version := c.Param("version")
action := c.Param("action")
message := version + "is" + action
c.String(consts.StatusOK,message)
})
//
h.POST("hertz/:version/*action",func(ctx context.Context, c *app.ReuqestContext){
c.String(consts.StatusOK, c.FullPath())
})
参数绑定Bind、Validate、BindAndValidate
回写:传递指针
Validate要配合go tag使用,在结构体的属性后面增加tag vd:""来检验。
中间件——客户端和服务端
使用h.Use()添加中间件(全局中间件和路由组中间件——h.Use()和v1.Use())
洋葱模型