武漢搭建網(wǎng)站seo短視頻入口
以下是一個(gè)基于 go-zero 框架的簡(jiǎn)單 RPC 服務(wù)示例,該示例包括一個(gè)服務(wù)端和一個(gè)客戶端通過(guò) gRPC 進(jìn)行通信。
服務(wù)端
1、定義 .proto 文件
在 rpc/add 目錄下創(chuàng)建 adder.proto 文件,定義 RPC 服務(wù):
syntax = "proto3";package adder;service Adder {rpc Add(AddRequest) returns (AddResponse) {}
}message AddRequest {int32 a = 1;int32 b = 2;
}message AddResponse {int32 result = 1;
}
2、生成代碼
使用 protoc 工具生成 Go 代碼:
protoc --go_out=plugins=grpc:. adder.proto
3、實(shí)現(xiàn)服務(wù)
創(chuàng)建 adder_grpc.go 文件,實(shí)現(xiàn) Adder 服務(wù):
package adderimport ("context"
)type AdderServer struct{}func (s *AdderServer) Add(ctx context.Context, req *AddRequest) (*AddResponse, error) {result := req.GetA() + req.GetB()return &AddResponse{Result: result}, nil
}
4、啟動(dòng)服務(wù)
創(chuàng)建 server.go 文件,啟動(dòng) gRPC 服務(wù):
package mainimport ("flag""fmt""net""github.com/zeromicro/go-zero/core/conf""github.com/zeromicro/go-zero/core/logx""github.com/zeromicro/go-zero/zrpc""github.com/your/path/to/rpc/add"
)var configFile = flag.String("f", "etc/config.yaml", "the config file")func main() {flag.Parse()var c zrpc.RpcServerConfconf.MustLoad(*configFile, &c)server := zrpc.MustNewServer(c)defer server.Stop()adderServer := &add.AdderServer{}add.RegisterAdderServer(server.Server, adderServer)fmt.Printf("Starting rpc server on %s...\n", c.ListenOn)server.Start()
}
5、配置文件
在 etc 目錄下創(chuàng)建 config.yaml 文件,配置服務(wù)地址和端口:
Name: adder
ListenOn: 127.0.0.1:8080
6、啟動(dòng)服務(wù)端
運(yùn)行 server.go 文件,啟動(dòng) RPC 服務(wù):
go run server.go
客戶端
1、創(chuàng)建客戶端
創(chuàng)建 client.go 文件,創(chuàng)建 gRPC 客戶端:
package mainimport ("context""fmt""time""github.com/zeromicro/go-zero/zrpc""github.com/your/path/to/rpc/add"
)func main() {client := zrpc.MustNewClient("127.0.0.1:8080")defer client.Conn.Close()adderClient := add.NewAdderClient(client.Conn)ctx, cancel := context.WithTimeout(context.Background(), time.Second)defer cancel()req := &add.AddRequest{A: 5,B: 7,}resp, err := adderClient.Add(ctx, req)if err != nil {fmt.Println("Error:", err)} else {fmt.Println("Result:", resp.GetResult())}
}
2、運(yùn)行客戶端
運(yùn)行 client.go 文件,調(diào)用 RPC 服務(wù):
go run client.go
輸出結(jié)果:
Result: 12
至此,一個(gè)基于 go-zero 框架的簡(jiǎn)單 RPC 服務(wù)示例完成。