grpc部署初体验

grpc是google开源的RPC框架,基于http2协议和ProtoBuf序列化机制,关于它的使用实例在官方文档已经有比较详细的介绍,在此仅对安装部署过程作一番总结。

要使用grpc进行正常的开发运行,必须集齐三样法宝,分别是:

Protocol Compiler,使.proto生成序列化代码,如helloworld.proto,通过protoc命令生成如下java文件:

Protobuf Runtime,针对特定语言的运行时库,如java中即是protobuf-java前缀的jar包。

protoc-gen-grpc-java插件,生成通讯代码,如:

这三样法宝都可以在github找到相应的安装包,当然,也可以自己编译生成,但在部署过程中千万要注意它们之间的版本一定要匹配,如Protocol Compiler用了v3.0.0,相应的Protobuf Runtime也是v3.0.0,但是protoc-gen-grpc-java用的却是v0.8.0,相应的grpc-all jar包也是0.8.0,这肯定是不行的,而且就算你找到了相应的版本,在linux环境编译安装过程中会遇到一些缺少文件的错误,涉及一些编译,C语言库的知识,这是一个很不错的探索机会,但是生产使用过程中我们需要的是安全,简洁,高效,把一部分过程封装起来,使用一些工具来统一管理这一过程,使用maven插件就是一个不错的方法,不需要很多步骤,只需要在pom.xml中加入一个配置即可,如你使用grpc v0.14.0:

 <build>
       <extensions>
            <extension>
                <groupId>kr.motd.maven</groupId>
                <artifactId>os-maven-plugin</artifactId>
                <version>1.4.1.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:3.0.0-beta-2:exe:${os.detected.classifier}               
                   </protocArtifact>
                    <pluginId>grpc-java</pluginId>
                    <pluginArtifact>
io.grpc:protoc-gen-grpc-java:0.14.0:exe:${os.detected.classifier}
                  </pluginArtifact>
                    <outputDirectory>${basedir}/src/main/java</outputDirectory>
                    <clearOutputDirectory>false</clearOutputDirectory>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>compile-custom</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

(参考来源:github官网)

此com.google.protobuf:protoc:3.0.0-beta-2:exe:${os.detected.classifier}中的版本号3.0.0-beta-2要和protobuf-java jar包的版本号一致,而io.grpc:protoc-gen-grpc-java:0.14.0中的版本号和你使用的grpc-all jar包中的版本号一致,outputDirectory代表生成的java文件的存放路径,而设置clearOutputDirectory为false,是为了执行compile和compile-custom过程中不覆盖前一步骤生成的文件。

一切就绪,maven install下,它会自动帮你安装缺少的插件并生成java文件。

中文官方文档:http://doc.oschina.net/grpc?t=57966

原文发布于微信公众号 - java达人(drjava)

原文发表时间:2016-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Redis集群及管理讲解

一、为什么要弄redis集群 集群技术是构建高性能网站架构的重要手段,试想在网站承受高并发访问压力的同时,还需要从海量数据中查询出满足条件的数据,并快速响应,我...

43470
来自专栏北京马哥教育

Linux性能及调优指南(翻译)之Linux进程管理

本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.1节的翻译 原文地址:http://www.re...

42590
来自专栏别先生

使用shell脚本定时采集日志数据到hdfs分布式文件系统

72670
来自专栏云计算教程系列

如何在Ubuntu 14.04上安装Cassandra并运行单节点集群

Cassandra或Apache Cassandra是一个高度可扩展的开源NoSQL数据库系统,在多节点设置上实现了出色的性能。

27930
来自专栏后端技术探索

爬虫、代理和Nginx

做过爬虫的人应该都知道,抓的网站和数据多了,如果爬虫抓取速度过快,免不了触发网站的防爬机制,几乎用的同一招就是封IP。解决方案有2个:

39620
来自专栏性能与架构

Nginx/ZooKeeper 负载均衡的差异

Nginx是著名的反向代理服务器,也被广泛的作为负载均衡服务器 ZooKeeper是分布式协调服务框架,有时也被用来做负载均衡 那么他们的区别是什么?如何选...

65970
来自专栏北京马哥教育

Linux性能及调优指南:进程管理

Linux进程管理 进程管理是操作系统的最重要的功能之一。有效率的进程管理能保证一个程序平稳而高效地运行。 Linux的进程管理与UNIX的进程管理相似。它...

39660
来自专栏FreeBuf

如何利用Ptrace拦截和模拟Linux系统调用

ptrace(2)这个系统调用一般都跟调试离不开关系,它不仅是类Unix系统中本地调试器监控实现的主要机制,而且它还是strace系统调用常用的实现方法。ptr...

22570
来自专栏容器云生态

根据红帽RHEL7官方文档对centos7进行技术剖析(二)

第一章 使用红帽kickstart,自动化安装rhel。 http://pan.baidu.com/s/1qWqfXlq    文档下载地址。 第二章: 控制对...

37870
来自专栏wblearn

我的Github之Pull request的使用

GitHub已经成为的一切开放源码软件的基石。开发人员喜欢它,基于它进行协作,并不断通过它开发令人惊叹的项目。除了​​代码托管,GitHub的主要吸引力是使用它...

13020

扫码关注云+社区

领取腾讯云代金券