Grpc&&protocol buffer结合提供grpc服务

Grpc&&protocol buffer

关于下载:首先下载一个protobuf

  • 对于mac系统就brew install protobuf 就可以了。然后可以 protoc --version 看下安装的版本号,默认按最新版。
  • 如果想手动按就去官网下载https://github.com/protocolbuffers/protobuf/releases

下载go语言的proto插件

  • protoc -h 看到没有 --go_out 就没法生成go的pb.proto代码,所以需要下载 go的插件-----执行下面命令,从源端下载
  • go get -u -v github.com/golang/protobuf/protoc-gen-go

下载grpc

  • go get -u google.golang.org/grpc
  • 如果用go module的话 ,如下引入,可以改成想要的版本
require (
	google.golang.org/grpc v1.33.1
	google.golang.org/protobuf v1.25.0
)

###根据proto生成 pb.go

先展示一下目录结构

$ tree
.
├── README.md
├── client.go
├── db
│   └── mongo
│       └── pool.go
├── go.mod
├── go.sum
├── grpc
│   ├── user
│   │   └── user.pb.go
│   └── user.proto
├── server.go
└── service
    └── userservice.go

其中user.proto如下所示

syntax = "proto3";

// user 包
package user;

// 指定 go 的包路径及包名
// option go_package="github.com/isMe/grpcdemo.git/grpc/user;user";

// User 服务及服务接口的定义
service User {
  rpc UserIndex(UserIndexRequest) returns (UserIndexResponse) {}
  rpc UserId(UserIdRequest) returns (UserIdResponse){}
  rpc UserDelete(UserDeleteRequest) returns (UserDeleteResponse) {}
  rpc UserInsert(UserInsertRequest) returns (UserInsertResponse){}
}

// 枚举类型
enum EnumUserSex {
  SEX_FEMALE = 0; // 枚举类型必须以 0 起始
  SEX_MALE = 1;
}

// 用户实体模型
message UserEntity {
  string name = 1;
  int32 age = 2;
  repeated string hobby = 3;
  EnumUserSex sex = 4;
}

// User 服务的各个接口的请求/响应结构
message UserIndexRequest {
  int32 page = 1;
  int32 pageSize = 2;
}

message UserIndexResponse {
  int32 err = 1;
  string msg = 2;
  // 返回一个 UserEntity 对象的列表数据
  repeated UserEntity data = 3;
}

message UserIdRequest {
  int64 id = 1;
}

message UserIdResponse {
  int32 err = 1;
  string msg = 2;
  UserEntity data = 3;
}

message UserDeleteRequest {
  int64 id = 1;
}

message UserDeleteResponse {
  int32 err = 1;
  string msg = 2;
}

message UserInsertRequest {
  UserEntity data = 1;
}

message UserInsertResponse {
  int32 err = 1;
  string msg = 2;
}
  • 生成pb.go 在grpc目录下执行 protoc --proto_path=. --go_out=plugins=grpc:./user user.proto
  • –proto_path是proto文件所在位置
  • –go_out这个是go的输出,要加上grpc插件
  • 最后跟上要编译的proto文件

以上操作已经把API都创建好了,接下来只需要写impl实现的server端就行了,如果另一端调用只需创建该API服务的grpcClient即可。代码库如下,把server和client run一下就行了。

我把整个demo的grpc服务放到GitHub上面了,可以点击>>>> 下载源码

https://github.com/StrandingHeart/GrpcDemo

猜你喜欢

转载自blog.csdn.net/finalheart/article/details/109419628