SpringBoot使用grpc优雅的编译protobuf

一、介绍

  Protocol Buffer是Google的语言中立的,平台中立的,可扩展机制的,用于序列化结构化数据 - 对比XML,但更小,更快,更简单。您可以定义数据的结构化,然后可以使用特殊生成的源代码轻松地在各种数据流中使用各种语言编写和读取结构化数据。
官网地址:https://developers.google.com/protocol-buffers/

二、下载(非必要)

下载地址:https://github.com/protocolbuffers/protobuf/releases
1、windows的java下载:protoc-x.x.x-win64.zip的版本
2、解压后,将protoc-3.9.0-win64\bin添加到环境变量中
3、验证安装是否成功

protoc --version

三、idea安装protobuf插件(非必要)

在File”–>“Settings”–>"Plugins"中搜索Protobuf Support插件

四、使用

1、添加maven依赖

<properties>
    <os.detected.classifier>windows-x86_64</os.detected.classifier>
    <grpc.version>1.15.0</grpc.version>
    <protobuf.version>3.6.1</protobuf.version>
</properties>


<dependencies>
     <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty</artifactId>
        <version>${grpc.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-protobuf</artifactId>
        <version>${grpc.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-stub</artifactId>
        <version>${grpc.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>${protobuf.version}</version>
    </dependency>
</dependencies>

2、添加maven插件

<build>
        <extensions>
            <extension>
                <groupId>kr.motd.maven</groupId>
                <artifactId>os-maven-plugin</artifactId>
                <version>1.5.0.Final</version>
            </extension>
        </extensions>
        <plugins>
            <plugin>
                <groupId>org.xolstice.maven.plugins</groupId>
                <artifactId>protobuf-maven-plugin</artifactId>
                <version>0.5.0</version>
                <configuration>
                    <protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
                    <pluginId>grpc-java</pluginId>
                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>compile-custom</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>            
        </plugins>
    </build>

3、创建定义文件

  在src/main文件夹下建立一个proto文件夹,然后在该文件夹新建一个user.proto文件,此文件定义我们需要传输的文件。
  使用grpc方式编译.proto时,会默认扫描src/main/proto文件夹下的protobuf文件。

proto3完整语法:https://www.cnblogs.com/sanshengshui/p/9739521.html

  需要定义一个用户的信息,包含的字段主要有编号、名称、年龄。需要注意一点的是proto文件和生成的Java文件名称不能一致!

//proto3语法注解:如果您不这样做,protobuf编译器将假定您正在使用proto2,这必须是文件的第一个非空的非注释行。
syntax = "proto3";
//生成的包名
option java_package = "com.sanshengshui.netty.protobuf";
//生成的java名
option java_outer_classname = "UserMsg";

message User{
    //ID
    int32 id = 1;
    //姓名
    string name = 2;
    //年龄
    int32 age = 3;
    //状态
    int32 state = 4;
}

4、使用maven创建对象

mvn clean compile

5、直接在代码中使用

@GetMapping("/test1")
public void test1(UserMsg.User user) {
    int age = user.getAge();
    UserMsg.User build = UserMsg.User.newBuilder().setAge(1).setId(2).build();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值