protobuf入门

上篇文章谈到了thrift,这次来讲讲在公司用到的另外一个协议pb3

惯例,先看看介绍

什么是pb

a language-neutral, platform-neutral, extensible way of serializing structured data for use in communications protocols, data storage, and more.

百度上这么介绍的 protocolbuffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

数据类型

  • bool,double,float,int32,int64,string等
  • 限定修饰符包含
    1.required 必须
    2.optional 可选
    3.repeated 重复,可用来定义集合
  • 集合表示方式 repeated int64 userId;

编写proto文件

syntax = "proto3"; //须显式声明为proto3 否则默认为proto2
option java_package = "com.shyn.test";
option java_outer_classname = "TestProtobuf";

//import "rpc.global.structure.proto";  //可引用其他proto文件定义

//定义"类"
message UserData {
    required int64 userId = 1; 
    string username = 2; 
    string mobile = 3; 
}
message GetUserListResp {
    int32 errorCode = 1;  //byte类型也用int32表示
    string errorMsg = 2;
    repeated UserData userData = 3; //集合
}

//枚举示例
enum WEEK {
    Should_Never_Used = 0; //protobuf3中要求第一个枚举值必须为0 仅为占位符
    MONDAY  = 1;
    TUESDAY = 2;
}

java API

TestProtobuf.GetUserListResp.Builder respBuilder = TestProtobuf.GetUserListResp.newBuilder(); // 构建对象
respBuilder.setErrorCode(0);
respBuilder.setErrorMsg("Test");
for(int i = 0; i < 3; i++) {
    TestProtobuf.UserData.Builder userDateBuilder = TestProtobuf.UserData.newBuilder();
    userDateBuilder.setUserId(i);
    userDateBuilder.setUserName("Shyn");
    respBuilder.addUserData(userDateBuilder.build()); //给集合中添加元素
}

respBuilder.getUserDataList(); // 获取集合
生成Java代码
protoc.exe --java_out=./ xxx.proto

至此算是对pb协议有了个简单了解!


不久前老大安排我开始一人去研究ELK日志追踪,算是又学到了不少东西吧,等弄得相对完善了再分享给大家吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值