Время узнать о волне протокольных буферов [Java]

задняя часть GitHub

предисловие

Protocol Buffers, представляет собой язык описания данных, разработанный Google, аналогичный XML, который может сериализовать структурированные данные и может использоваться для хранения данных, протоколов связи и т. д.

Он не зависит от языка и платформы и чрезвычайно расширяем. Официальная поддержка на данном этапеC++,JAVA,PythonТри языка программирования, но вы можете найти большое количество сторонних пакетов расширения, охватывающих практически все языки.

Google объявил об этом как о проекте с открытым исходным кодом 7 июля 2008 г.

Несмотря на то чтоProtocol BuffersОн был открыт с открытым исходным кодом очень рано, и частота использования неJsonиXMLМногие, большинство из них используются в протоколах разработки игр,RPCобмен мгновенными сообщениями, однако такой инструмент обмена данными болееJsonиXMLПреимуществ много, номеньше,Быстрее,проще

Эта статья следуетВремя узнать о волне протокольных буферов [Android]После фона Java SpringBoot быстро интегрирует протокольные буферы.

Быстрое использование протокольных буферов в SpringBoot

(1) Maven настраивает среду компиляции Protocol Buffers в среде SpringBoot.

  • 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-пакеты.

(2) Напишите файл .proto в проекте Java и создайте файл Java.

  • setup 1

    Файл .proto записывается в java-проекте, например: New 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;
      
      }
    

    Файл .proto записывается в java-проекте, например: Создайте новый 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Сгенерированные файлы можно найти в разделе, а результаты можно получить


    Уведомление:

    • Если файл не распознается по идее, пожалуйста, установитеProtobuf Supportплагин
    • com\hk\protocolbufferкаталогoption java_packageуказанное имя пакета
    • Справочник по синтаксису .proto:Developers.Google.com/protocol - нет...

(3) Использование SpringBoot с Protobuf в проектах Java

  • 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Отладка - головная боль, я нашел несколько инструментов отладки в Интернете (добро пожаловать, чтобы добавить):

Заканчивать

Статьи по Теме

Статья 1 - Сетевые статьи:

Часть 2. Анализ модифицированного исходного кода

Часть 3. Компонентизация Android и быстрая реализация MVP

Часть 3. Время узнать о волне протокольных буферов [Android]

Часть 3. Время узнать о волне протокольных буферов [Java]

обновление....

О личности

Github:github.com/chengzichen

CSDN : blog.CSDN.net/Оранжевый Чен…

личный блог:chengzichen.github.io/

Я посвятил себя исследованию компонентов Android и плагинов. Если у вас есть лучшие идеи, вы можете связаться со мной, чтобы расти вместе.
图片名称