新手自用实践记录
创建项目
创建一个项目
mkdir echo && cd echo
编写IDL文件
echo.proto文件,定义我们的服务
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的文件
生成如下结构
编写逻辑代码
生成的代码已经为我们搭建好服务框架,对于我们来说,只需要编写handler.go文件下的实现逻辑。
// 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
}
我们可以简单实现来测试功能,这一部分主要是实现的RPC的服务端功能。
func (s *EchoImpl) Echo(ctx context.Context, req *echo.Request) (resp *echo.Response, err error) {
return &echo.Response{Message: req.Message}, nil
}
客户端服务
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就是用来创建客户端的,第一个参数就是调用的服务名。
api调用kitex-gen\api。
客户端通过req向服务器发送请求,服务器接受req后返回Responese。