是时候该了解一波Protocol Buffers了[Java]

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

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

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

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

文章是继 是时候该了解一波Protocol Buffers了[Android]
后的Java后台SpringBoot快速集成Protocol Buffers

SpringBoot中快速使用Protocol Buffers

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

  • setup 1

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

    <dependencies>
          	<dependency>
          		<groupId>com.google.protobuf</groupId>
          		<artifactId>protobuf-java</artifactId>
          		<version>3.5.1</version>
          	</dependency>
          	<dependency>
          		<groupId>com.google.protobuf</groupId>
          		<artifactId>protobuf-java-util</artifactId>
          		<version>3.5.1</version>
          	</dependency>
          	<dependency>
          		<groupId>com.googlecode.protobuf-java-format</groupId>
          		<artifactId>protobuf-java-format</artifactId>
          		<version>1.4</version>
          	</dependency>
      	    </dependencies>

    注意:

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

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

    • setup 2

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

    <plugin>
              <groupId>org.xolstice.maven.plugins</groupId>
              <artifactId>protobuf-maven-plugin</artifactId>
              <version>0.5.0</version>
              <extensions>true</extensions>
              <configuration>
                  <!--默认值-->
                  <protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>
                  <!--默认值-->
                  <!--<outputDirectory>${project.build.directory}/generated-sources/protobuf/java</outputDirectory>-->
                  <!--<outputDirectory>${project.build.sourceDirectory}</outputDirectory>-->
                  <!--设置是否在生成java文件之前清空outputDirectory的文件,默认值为true,设置为false时也会覆盖同名文件-->
                  <clearOutputDirectory>false</clearOutputDirectory>
                  <!--默认值-->
                  <temporaryProtoFileDirectory>${project.build.directory}/protoc-dependencies
                  </temporaryProtoFileDirectory>
                  <!--更多配置信息可以查看https://www.xolstice.org/protobuf-maven-plugin/compile-mojo.html-->
              </configuration>
              <executions>
                  <execution>
                      <goals>
                          <goal>compile</goal>
                          <goal>test-compile</goal>
                      </goals>
                      <!--也可以设置成局部变量,执行compile或test-compile时才执行-->
                      <!--<configuration>-->
                      <!--<protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>-->
                      <!--<outputDirectory>${project.build.directory}/generated-sources/protobuf/java</outputDirectory>-->
                      <!--<temporaryProtoFileDirectory>${project.build.directory}/protoc-dependencies</temporaryProtoFileDirectory>-->
                      <!--</configuration>-->
                  </execution>
              </executions>
          </plugin>
          <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>build-helper-maven-plugin</artifactId>
              <executions>
                  <execution>
                      <id>add-protobuf-generate-sources</id>
                      <phase>generate-sources</phase>
                      <goals>
                          <goal>add-source</goal>
                      </goals>
                      <configuration>
                          <sources>
                              <source>target/generated-sources/protobuf/java</source>
                          </sources>
                      </configuration>
                  </execution>
    
                  <execution>
                      <id>add-protobuf-generate-test-sources</id>
                      <phase>generate-sources</phase>
                      <goals>
                          <goal>add-test-source</goal>
                      </goals>
                      <configuration>
                          <sources>
                              <source>target/generated-test-sources/protobuf/java</source>
                          </sources>
                      </configuration>
                  </execution>
              </executions>
          </plugin>

注意:


  • 这里的指定的输出路径是 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语法参照: developers.google.com/protocol-bu…

原文 

https://juejin.im/post/5b2a2880f265da598451eff3

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 是时候该了解一波Protocol Buffers了[Java]

分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址