gRpc及Protobuf

Posted by YaPi on February 5, 2021

概念介绍

RPC

  • RPC代指远程过程调用(Remote Procedure Call)
  • 包含了传输协议和编码(对象序列号)协议
  • 允许运行于一台计算机的程序调用另一台计算机的子程序(比如:程序代码调用一个Redis)
  • 简单、高效

gRpc 和 ProtoBuff

  • gRpc是一个高性能、开源、通用的RPC框架
  • 基于HTTP2.0协议标准设计开发
  • 支持多语言,默认采用Protocol Buffers数据序列化协议

什么是Protocol Buffers?

  • 是一种轻便高效的序列化结构化数据的协议
  • 通常用在存储数据和需要远程数据通信的程序上
  • 跨语言、更小(相对于json、xml等)、更快也更简单

使用其好处

  • 加速站点之间数据传输速度
  • 解决数据传输不规范问题(比如定义json的时候,可以随便定义,但是ProtoBuff会有限制)

常用概念

  • Message: 描述了一个请求或响应的消息格式

    singular: 表示成员有0个或者一个,一般省略不写 repeated: 表示该字段可以包含0-N个元素,比如go语言中的数组、切片等

  • 字段标识:消息定义中,每个字段都有一个唯一的数值
  • 常用数据类型:double、float、int32/64、bool、string、bytes
  • service服务定义:在service中可以定义个RPC服务接口

实例

// 版本号
syntax = "proto3"

// 包名
package go.test.product;

service Product{
    // 定义的服务
    rpc AddProduct(ProductInfo) returns (ResponseProduct){}
}

// 驼峰命名
// 数字 1、2是字段标识
message ProductInfo{
    int64 id=1;
    string product_name = 2;
}

message ResponseProduct {
    int64 product_id = 1;
    
}

安装protobuf后生成相关文件

mac os :

brew install protoc

go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/protoc-gen-go
go get github.com/micro/micro/v2/cmd/protoc-gen-micro

若执行的时候报找不到文件:

找到protoc-gen-go 文件,执行以下命令,该文件通过go get安装时会安装在$GOPATH/go/bin目录下
cp protoc-gen-go /usr/local/bin/
然后vim ~/.bash_profile
export GOPATH=$HOME/go PATH=$PATH:$GOPATH/bin