博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
是时候该了解一波Protocol Buffers了[Java]
阅读量:5843 次
发布时间:2019-06-18

本文共 6002 字,大约阅读时间需要 20 分钟。

前言

Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。

它不依赖于语言和平台并且可扩展性极强。现阶段官方支持C++JAVAPython三种编程语言,但可以找到大量的几乎涵盖所有语言的第三方拓展包。

google在2008年7月7号将其作为开源项目对外公布

虽然Protocol Buffers很早就被开源出来,被使用的频率并没有JsonXML多,大多数被用于游戏开发协议,RPC和即时通讯.然而这样的数据交换利器比JsonXML的利处多太多了,但更小更快更简单

该文章是继后的Java后台SpringBoot快速集成Protocol Buffers

SpringBoot中快速使用Protocol Buffers

(一)SpringBoot 环境下Maven配置 Protocol Buffers编译环境

  • setup 1

    配置 protobuf,protobuf-java-util,protobuf-java-format依赖

    com.google.protobuf
    protobuf-java
    3.5.1
    com.google.protobuf
    protobuf-java-util
    3.5.1
    com.googlecode.protobuf-java-format
    protobuf-java-format
    1.4
    复制代码

    注意:

    • protobuf-java-utilprotobuf相关的工具类

    • protobuf-java-format 是可以将protobuf转换为Json格式转换器

    • setup 2

    配置编译器,编译MAven插件,文件输出环境

    org.xolstice.maven.plugins
    protobuf-maven-plugin
    0.5.0
    true
    ${project.basedir}/src/main/proto
    false
    ${project.build.directory}/protoc-dependencies
    compile
    test-compile
    org.codehaus.mojo
    build-helper-maven-plugin
    add-protobuf-generate-sources
    generate-sources
    add-source
    target/generated-sources/protobuf/java
    add-protobuf-generate-test-sources
    generate-sources
    add-test-source
    target/generated-test-sources/protobuf/java
    复制代码

注意:

  • 这里的指定的输出路径是arget/generated-sources/protobuf/java,该路径下的java文件都是直接使用和打入jar包和war包

(二)java项目中编写.proto文件,生成java文件

  • setup 1

    java项目中编写.proto文件了.例如: 新建 Result.proto

    package com.hk.protocolbuffer;  // 关注1:包名  option java_package = "com.hk.protocolbuffer";  option java_outer_classname = "Result";  // 关注2:option选项    // 关注3:消息模型  message AppResult {    optional string message = 1;    required string data = 2;    optional string version = 3;    optional string mobile = 5;    optional int32  code= 6[default = 500];    optional string email = 7;    }复制代码

    java项目中编写.proto文件了.例如: 新建 Demo.proto

    package protocobuff_Demo;  // 关注1:包名    option java_package = "com.hk.protocolbuffer";  option java_outer_classname = "Demo";  // 关注2:option选项    // 关注3:消息模型  // 下面详细说明  // 生成 Person 消息对象(包含多个字段,下面详细说明)  message Person {    required string name = 1;    required int32 id = 2;    optional string email = 3;      enum PhoneType {      MOBILE = 0;      HOME = 1;      WORK = 2;    }      message PhoneNumber {        required string number = 1;      optional PhoneType type = 2 [default = HOME];    }      repeated PhoneNumber phone = 4;  }    message AddressBook {    repeated Person person = 1;  }复制代码
  • setup 2

    使用mvn clean install 命令 构建,在项目的arget/generated-sources/protobuf/java下能找到生成的文件,收取成果


    注意:

    • 如果文件无法被idea 识别,请安装Protobuf Support插件
    • com\hk\protocolbuffer 目录是option java_package 指定的包名
    • .proto语法参照:

(三)Java项目中SpringBoot配合 Protobuf 使用

  • setup 1

    配置 ProtobufHttpMessageConverter,其他的基本配SpringBoot都自动配置好了,直接使用就可以了

    /**   * This example demonstrates serving up REST payloads encoded using Google Protocol Buffers.   */  @SpringBootApplication  public class App {        public static void main(String[] args) {          SpringApplication.run(App.class, args);      }        @Bean      ProtobufHttpMessageConverter protobufHttpMessageConverter() {          return new ProtobufHttpMessageConverter();      }  }复制代码
  • setup 2

    使用举例

    @RestController  @RequestMapping("/app")  public class ApiRegisterController {        @Resource(name = "appUserService")      private AppUserService appUserService;                  @PostMapping("register2")      public Demo.Person register2(@RequestBody Result.AppResult appBaseResult) throws Exception {          return Demo.Person.newBuilder().addPhone(Demo.Person.PhoneNumber.newBuilder().setNumber(appBaseResult.getData()).build()).setId(1).setName("张三").build();      }  }复制代码

由于protobuf调试比较头痛的问题,我在网上找到了一些调试工具(欢迎补充):

  • 工具:
  • 百度开源的

结束

相关文章

第一篇-网络篇:

第二篇-Retrofit源码解析

第三篇-Android组件化和快速实现MVP

第三篇-是时候该了解一波Protocol Buffers了[Android]

第三篇-是时候该了解一波Protocol Buffers了[Java]

更新中....

关于个人

Github:

CSDN :

个人博客 :

本人一直都致力于Android组件化和插件化的研究如果大家有更好的想法可以联系我一起成长

转载地址:http://piqcx.baihongyu.com/

你可能感兴趣的文章
android模块化 osgi,基于OSGi的Android应用模块动态加载框架设计与实现
查看>>
html-5表白神器源码,C# 表白神器源码(winform)
查看>>
war部署到tomcat 用户目录 public_html~,在Tomcat中部署Web项目的操作方法(必看篇)
查看>>
html添加悬浮图片,HTML5和jQuery制作网页灰度图片悬浮效果_js
查看>>
1、取得/etiantian文件的权限对应的数字(考试题答案系列)
查看>>
《专业嵌入式软件开发》的样章、建议和勘误
查看>>
决定员工发展命运的34条重要行为规范
查看>>
网管到底要学什么(一)
查看>>
红帽集群套件RHCS四部曲(测试篇)
查看>>
企业级 布署 vmvare Esxi 5.0.0 从零开始教程 (二) vSphere clinet 安装
查看>>
一个cp命令引发的mongodb大量慢查询
查看>>
C#常用文件操作
查看>>
Windows Server 2016-图形化迁移FSMO角色
查看>>
对Python装饰器的个人理解方法
查看>>
思科路由器Ez***测试
查看>>
Win10 镜像安装到新固态硬盘两法
查看>>
正则表达式入门教程-连载(2)-正则表达式引擎怎么工作的
查看>>
利用rsyslog 对Linux用户进行审计
查看>>
深入了解TMG企業版的獨立陣列
查看>>
mpls--通过全局路由表和静态路由的因特网接入
查看>>