Bootstrap

grpc之Java实战proto文件篇

proto文件的编写

什么是protobuf

协议缓冲区(protobuf)提供了一种语言中立、平台中立、可扩展的机制,用于以向前兼容和向后兼容的方式序列化结构化数据。它类似于 JSON,只是它更小更快,并且生成本地语言绑定。

协议缓冲区是定义语言(在 .proto文件中创建)、proto 编译器生成的与数据接口的代码、特定于语言的运行时库以及写入文件(或通过网络连接)。

proto文件的编写

这一句代码的意思是使用哪一种语法,我们一般是用proto3

syntax = "proto3";

这个是是否生成多个类,其实本质上是没有什么太大的区别的,默认值是生成一个,建议也是大家生成一个,方便管理

option java_multiple_files = true;

生成源代码所在包包名

option java_package = "com.keke.news.proto";

最外层类类名

option java_outer_classname = "HelloProto";

最终的proto文件就是这样


//使用proto3语法
syntax = "proto3";

//@2 生成多个类(defail false)
//option java_multiple_files = true;
//生成Java所在类的包
option java_package = "com.xj.news.proto";
//生成外层类类名
option java_outer_classname = "HelloProto";
//option objc_class_prefix = "HL";
//proto类名
package news;
//定义grpc服务RouteGuide
service NewsService {
    // list方法名,NewsRequest代表传入的参数,NewsResponse 代表返回的响应
    rpc list (NewsRequest) returns (NewsResponse) {}
}

// The request message containing the user's name.
//类型于Java中的实体类
message NewsRequest {
    string date =1 ; // =1 其实是编号,
}

// The response message containing the greetings
message NewsResponse {
    repeated News news = 1;
}

//News 新闻实体对象
message News{
    int32  id =1;
    string title =2 ;
    string content =3;
    int64  createTime =4;
}

通过proto文件生成代码需要的pom依赖

那么我们通过proto文件生成Java源代码需要那些依赖内?

<properties>
        <grpc.version>1.29.0</grpc.version>
        <protobuf.version>3.11.0</protobuf.version>
    </properties>

    <dependencies>
        <!--  grpc-netty 底层的通讯组件-->
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty-shaded</artifactId>
            <version>${grpc.version}</version>
        </dependency>
        <!--  grpc对protobuf的支持工具包-->
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>${grpc.version}</version>
        </dependency>
        <!--存根,通过这个处理存根-->
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>1.29.0</version>
        </dependency>
        <!--注解-->
        <dependency> <!-- necessary for Java 9+ -->
            <groupId>org.apache.tomcat</groupId>
            <artifactId>annotations-api</artifactId>
            <version>6.0.53</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <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.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.0.1.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <!--                通过定义的环境变量找到具体的protobuf编译器位置-->
                <groupId>org.xolstice.maven.plugins</groupId>
                <!--                通过这个插件maven自动根据proto文件生成Java代码-->
                <artifactId>protobuf-maven-plugin</artifactId>
                <version>0.5.1</version>

                <configuration>
                    <!--                    用来编译生成文件-->
                    <protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
                    </protocArtifact>
                    <pluginId>grpc-java</pluginId>
                    <!--                    用于生成grpc的工具类,用于简化实际的数据处理过程,生成的代码简化程序开发工作-->
                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
                    </pluginArtifact>
                    <protoSourceRoot>proto</protoSourceRoot>
                </configuration>

                <executions>
                    <execution>
                        <goals>
                            <!--                            生成消息代码-->
                            <goal>compile</goal>
                            <!--                            生成grpc的通讯文件-->
                            <goal>compile-custom</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

protobuf插件在idea的安装

  1. 点击File选择setting
    在这里插入图片描述
  2. 点击piugins输入protobuf点击install进行安装,可能需要重启idea,完成后点击OK即可
    在这里插入图片描述
    当你安装完成.你的.proto文件将会变成带图标的
    在这里插入图片描述
;