go-zero的远程调用服务是基于gRpc的gRPC教程与应用。
zero使用使用gRpc需要安装protoc
插件,因为gRpc基于protoc插件使用protocol buffers文件生成rpc服务器和api的代码的。
gRPC 的代码生成还依赖 protoc-gen-go,protoc-gen-go-grpc 插件来配合生成 Go 语言的 gRPC 代码。
goctl env check --install --verbose --force
也可以使用go get命令安装
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
构建rpc服务:goctl rpc new rpcservice
go-zero.dev官网修改逻辑层代码,如下图所示:
详情请移步官网gRPC demo 代码生成。
启动rpc服务器:
编写客户端调用方法,其中必要条件为_grpc.pb
和pb
文件:
将这两个文件复制到新项目中用于构建客户端。
创建客户端实例的代码如下:
//配置连连接参数(无加密)
dial, _ := grpc.Dial("localhost:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))
defer dial.Close()
//创建客户端连接
client := rpcservice.NewRpcserviceClient(dial)
需要的库如下:
import (
"context"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
客户端实例调用方法:
res, _ := client.Ping(context.Background(), &rpcservice.Request{Ping: "xiaoxu"})
完整代码如下:
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"rpcclient/rpcservice"
)
func main() {
//配置连连接参数(无加密)
dial, _ := grpc.Dial("localhost:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))
defer dial.Close()
//创建客户端连接
client := rpcservice.NewRpcserviceClient(dial)
//通过客户端调用方法
res, _ := client.Ping(context.Background(), &rpcservice.Request{Ping: "xiaoxu"})
fmt.Println(res.Pong)
}
启动客户端如下图所示,成功获取服务端方法返回值。
更多信息请移步gRPC远程调用服务端与客户端连接详解。
所以在go-zero搭建的服务中,任何具有_grpc.pb
和pb
文件的项目都可以通过内部方法构建客户端实例从而远程调用服务器的方法。
这里仅仅实现了远程调用没有任何权限认证,grpc有自己的权限认证套件,在后续会继续更新。