ProtoBuf之在GoLang中实现GRPC服务

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文件

  1. 先进入proto目录:cd proto
  2. 创建*.pb.go和*_grpc.pb.go文件
protoc -I . --go_out ./ --go_opt paths=source_relative --go-grpc_out ./ --go-grpc_opt paths=source_relative ./*.proto
  1. 创建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
  1. 创建swagger.json文件(供UI访问服务)
protoc -I . --openapiv2_out ./gen/openapiv2 --openapiv2_opt logtostderr=true ./*.proto

测试

1. 编写server端HelloService服务的实现逻辑

protobuf提供的只是HelloService的接口,我们需要去在server端实现ServiceServ

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值