专栏首页CodeSheep的技术分享RPC框架实践之:Google_gRPC

RPC框架实践之:Google_gRPC

gRPC是Google开源的通用高性能RPC框架,它支持的是使用Protocol Buffers来编写Service定义,支持较多语言扩平台并且拥有强大的二进制序列化工具集。与文章《RPC框架实践之:Apache Thrift》 一文中实践的另一种通用RPC框架 Thrift 能通过Generator自动生成对应语言的Service接口类似,gRPC也能 自动地生成 Server和Client的 Service存根(Stub),我们只需要 一个命令 就能快速搭建起RPC运行环境。


概述

gRPC是Google开源的通用高性能RPC框架,它支持的是使用Protocol Buffers来编写Service定义,支持较多语言扩平台并且拥有强大的二进制序列化工具集。与文章《RPC框架实践之:Apache Thrift》 一文中实践的另一种通用RPC框架 Thrift 能通过Generator自动生成对应语言的Service接口类似,gRPC也能 自动地生成 Server和Client的 Service存根(Stub),我们只需要 一个命令 就能快速搭建起RPC运行环境。

下面实践一下gRPC框架,做的事情就是:Client端通过远程RPC调用Server的获取时间的接口,从而将服务器时间获取到本地并显示。

类似于之前对于 RPC框架: Thrift 的实践步骤,下面一一阐述。


开发gRPC-API

  • 首先创建一个基于Maven的项目: GrpcAPI
  • pom中加入grpc相关的依赖

这个grpc-all包含了很多grpc相关的组件:grpc-netty 、 grpc-protobuf 、grpc-stub 等等

  • pom中加入grpc相关的 build插件

这里添加两个Maven插件,目的是后面需要用这些插件来执行Protocol Buffers命令,从而自动生成相关的Stub代码:

os-maven-plugin:生成平台无关的属性 protobuf-maven-plugin:执行Protocol Buffers命令并生成Stub代码库

  • 编写.proto的服务定义文件

这里.proto文件的作用和写法就和我的前一篇文章《RPC框架实践之:Apache Thrift》 一文中Thrift所要求的.thrift文件编写一样,是有其自己的语法要求的!

  • 执行mvn compile命令来自动生成代码Stub

mvn编译完成以后,在target/generated-sources目录下就能看到根据上面.proto文件自动转化生成的Java代码Stub

代码生成结果如下所示

好了,既然gRPC-API已经有了,下面可以分别编写服务端和客户端


开发gRPC服务端

  • 创建基于Maven的项目:Server
  • pom中添加 GrpcAPI 依赖

接下来一步比较关键

  • 实现gRPC服务接口

我想此处重写的getDate()方法并不陌生吧,这正是上文 .proto 文件中定义的Service接口。 此处逻辑比较简单:获取当前时间,并且将其与请求RPCDateRequest中提取出的userName字段进行拼接,然后返回给调用端!形成一个闭环

  • 创建gRPC服务端启动类

端口自定义的9999,也就是在该端口监听。现在可以立即运行GRPCServer,来启动服务端


开发gRPC客户端

  • 创建基于Maven的项目:Client
  • pom中依然需要添加 GrpcAPI 依赖
  • 创建gRPC客户端启动类

现在立即启动 GRPCClient!


C-S通信实验

还记得我们的目标吗?

RPC完成的即是远程的过程调用,在本实验中那就是客户端可以远程调用服务端的getDate()过程,并将结果取到客户端来显示!


后记

本文实验代码在此 → 需要自取

作者其他一些RPC框架的实践如下:

作者一些关于容器化、微服务化方面的文章如下:

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RPC框架实践之:Apache_Thrift

    CodeSheep
  • RPC框架是啥之Java自带RPC实现,RMI框架入门

    首先RMI(Remote Method Invocation)是Java特有的一种RPC实现,它能够使部署在不同主机上的Java对象进行通信与方法调用,它是一种...

    Java猫说
  • Golang之rpc框架rpcx

    远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。通过该协议程序员可以实现像调取本地函数一样,调取远程服务的函数。...

    孤烟
  • rpc框架之 thrift连接池实现

    接前一篇rpc框架之HA/负载均衡构架设计 继续,写了一个简单的thrift 连接池: 先做点准备工作: package yjmyzz; public cla...

    菩提树下的杨过
  • Thrift or gRPC ?Alluxio RPC框架的深度实践总结

    作为Alluxio 2.0发布版本的一部分,我们将RPC框架从Apache Thrift(见文末链接1)变为gRPC(见文末链接2)。在本文中,我们将讨论这一变...

    Spark学习技巧
  • RPC框架是啥之Apache CXF一款WebService RPC框架入门教程

    Apache CXF是一个开源的WebService RPC框架,是由Celtix和Codehaus XFire合并而成的。它可以说是一个功能齐全的集合。

    Java猫说
  • RPC框架原理与实现

    RPC,全称 Remote Procedure Call(远程过程调用),即调用远程计算机上的服务,就像调用本地服务一样。那么RPC的原理是什么呢?了解一个技术...

    JadePeng
  • 很哇塞的 3 个 Java 实战项目!

    我遇到过很多应届生,整个大学学了 4 年的编程,自己敲的代码可能还不到 3000 行。你让他做用自己学的编程知识做个什么东西,他就蒙了,不知道从哪里下手。

    Guide哥
  • rpc框架之gRPC 学习 - hello world

    grpc是google在github于2015年开源的一款RPC框架,虽然protobuf很早google就开源了,但是google一直没推出正式的开源框架,导...

    菩提树下的杨过

扫码关注云+社区

领取腾讯云代金券