grpc之Java实战proto文件篇

2023-11-08

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文件将会变成带图标的
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

grpc之Java实战proto文件篇 的相关文章

随机推荐

  • html5移动web开发黑马掌上商城_前端全套:黑马2019最新前端课程入门到精通【全网首发】...

    以上资源收集至互联网 如有侵权请联系删除 资源获取方式 扫码关注资源库公众号 回复密码 20190810 即可获得 截图展示 课程信息 课程难度 初级 学习人数 7942542 课程状态 已完结 时长 四个月 课程介绍 课程设计之初就对目前
  • oracle数据库表空间如何清理,oracle数据库清理临时表空间

    方法一 重启库 库重启时 Smon进程会完成临时段释放 TEMP表空间的清理操作 不过很多的时侯我们的库是不允许down的 所以这种方法缺少了一点的应用机会 不过这种方法还是很好用的 法二 Metalink给出的一个方法 修改一下TEMP表
  • 初认python-4

    文件 变量是把数据保存到内存中 如果程序重启 主机重启 内存中的数据就会丢失 要想能让数据被持久化储存 就可以把数据储存到硬盘中 也就是在文件中保存 在ws中的目录名之间使用 来分割 但是使用 来分给也是可以的 但是我们一般用 因为 在编译
  • Java工具 Jstack 的使用

    jstack Prints Java thread stack traces for a Java process core file or remote debug server Jstack 主要的作用是生成当前进程中所有线程的信息 也
  • 【解决】org.springframework.beans.factory.UnsatisfiedDependencyException: Error creat

    org springframework beans factory UnsatisfiedDependencyException Error creating bean with name userController Unsatisfie
  • React路由懒加载的实现

    原理 webpack代码分割 React利用 React lazy与import 实现了渲染时的动态加载 利用Suspense来处理异步加载资源时页面应该如何显示的问题 1 React lazy 通过lazy api来动态import需要懒
  • 开开心心带你学习MySQL数据库之第三篇下

    MySQL表的增删改查 前言 mysql最核心的部分 这里涉及到的都是咱们在工作中最常用到的 这些东西掌握了 就覆盖日常工作80 以上的内容 励志言论 自己是自己个人成长的第一责任人 如果你是一个想要自己成长的人 势必要主动成长 鸡蛋从外打
  • Scroller startScroll() fling() 参数详解

    fling Start scrolling based on a fling gesture The distance travelled will depend on the initial velocity of the fling p
  • 关于js if(“变量”){} 总结

    在前台进行if 变量 判断的时候当 变量 为一些特殊值时 就会有点分不清楚 为了加深记忆现在在这里做一下总结 var a null if a console log true else console log false 结果 false
  • 十二、Docker日志管理

    Docker日志管理 Docker的日志大致有两种 一是Docker 引擎日志 也就是 dockerd服务自身运行时的日志 二是容器内的服务产生的日志 后一种有一定使用经验的童鞋应该发现有时候我们能通过docker logs查看容器日志 有
  • 计算机音频知识,音频视频基本知识介绍.ppt

    音频视频基本知识介绍 Here again they have theoretically seen the different connectors here we need to explain them a bit As far as
  • Android logcat调试工具的重定位输出日志

    在tools目录里面 命令行中输入adb logcat gt d 1 txt即可
  • 设置title提示框的样式

    默认的title不能设置样式 通过js和css实现title的功能 css样式 html代码 span span
  • 程序员的底层思维:逻辑思维

    更多关于思维能力的内容 尽在我的新书 程序员必备的思维能力 你讲话要有逻辑 你这逻辑不对 你的底层逻辑是什么 说说你的逻辑思维能力体现在哪儿 在日常交流中 我们会频繁的使用 逻辑 这个词 但能够清晰的说出逻辑的定义 什么是逻辑 应该不多 能
  • 安装anaconda 报错 failed to create menus

    报错发现百度搜索的解决办法五花八门 实际试过几个不能有效解决问题 遂专心研究出错日志 发现报错找不到python3 X dll 遂猜测是未安装好python3 7所致 回忆起可能是与安装的是32位而不是64位的版本有关 遂卸载python3
  • Julia教程:Julia语言入门

    正如我在 朱莉娅是什么 Julia是一种用于数值计算的免费开源高级 高性能动态编程语言 它将动态语言的开发便利性与已编译的静态类型语言的性能相结合 它设计用于科学计算 机器学习 数据挖掘 大规模线性代数 分布式计算和并行计算 并且易于使用P
  • 【深度探索STL】空间配置器(三) 第二级配置器

    考虑到小型区块所可能造成的内存破碎问题 SGI 设计了双层级配置器 第一级配置器参见博文 http blog csdn net wenqian1991 article details 19566499 这里则学习第二级配置器 第二级配置器的
  • plsql的安装与部署

    plsql是什么 PL SQL Developer是一个集成开发环境 专门开发面向Oracle数据库的应用 PL SQL也是一种程序语言 叫做过程化SQL语言 Procedural Language SQL PL SQL是Oracle数据库
  • GMAT Sentence Correction(3): 时态

    Sentence Correction句子改错是GMAT考试中的一个项目 用于考察正式英语的书写能力 通过研究GMAT句子改错可以提高英语语法 遣词造句更加严谨整洁 tense时态问题属于GMAT Sentence Correction考察
  • grpc之Java实战proto文件篇

    grpc之Java实战proto文件篇 proto文件的编写 什么是protobuf proto文件的编写 通过proto文件生成代码需要的pom依赖 protobuf插件在idea的安装 proto文件的编写 什么是protobuf 协议