GRPC是什么
GRPC是RPC(远程过程调用)实现的一种框架,可以使得两个服务调用对方的api仿佛是在调用本地方法一样,通过tcp访问实现。本文将通过ProtoBuf文件定义服务之间的访问接口,之后通过grpc和http成功访问(Golang实现)。
环境准备
1. 新建go mod项目
在GoLand IDE里按照如下图新建一个go mod项目

2. 准备ProtoBuf文件:HelloService.proto
syntax = "proto3";
package proto;
option go_package = "./proto";
import "google/api/annotations.proto";
message HelloServiceRequest {
string name = 1;
string age = 2;
}
message HelloServiceResponse {
string result = 1;
}
service Service {
rpc sayHello(HelloServiceRequest) returns (HelloServiceResponse) {
option (google.api.http) = {
get: "/say_hello"
};
}
}
3. 添加提供http访问所必要的proto依赖文件
在HelloService.proto文件所在目录下新建google/api/目录,往其中添加annotations.proto,field_behavior.proto,http.proto和httpbody.proto四个文件。这四个文件可以从google api github 中复制
4. 创建tool.go文件并使用go mod tidy命令下载依赖
tool.go
package tools
import (
_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway"
_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2"
_ "google.golang.org/grpc/cmd/protoc-gen-go-grpc"
_ "google.golang.org/protobuf/cmd/protoc-gen-go"
)
在tool.go写入以上代码后,在项目home目录下执行以下命令下载依赖。
go mod tidy
5. 配置GOBIN路径并安装go grpc相关的可执行文件
export GOBIN=$GOPATH/bin
go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 google.golang.org/protobuf/cmd/protoc-gen-go google.golang.org/grpc/cmd/protoc-gen-go-grpc
6. 创建相关的go文件
- 先进入proto目录:
cd proto - 创建*.pb.go和*_grpc.pb.go文件
protoc -I . --go_out ./ --go_opt paths=source_relative --go-grpc_out ./ --go-grpc_opt paths=source_relative ./*.proto
- 创建pb.gw.go文件
protoc -I . --grpc-gateway_out ./ --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true ./*.proto
- 创建swagger.json文件(供UI访问服务)
protoc -I . --openapiv2_out ./gen/openapiv2 --openapiv2_opt logtostderr=true ./*.proto
测试
1. 编写server端HelloService服务的实现逻辑
protobuf提供的只是HelloService的接口,我们需要去在server端实现ServiceServ

最低0.47元/天 解锁文章
664

被折叠的 条评论
为什么被折叠?



