快捷搜索:  汽车  科技

rpc框架基本原理(Gprc和protobuf使用例子解析)

rpc框架基本原理(Gprc和protobuf使用例子解析)2.Grpc服务端的核心实现如下:主要是在指定的端口监听Grpc客户端的RPC请求到来,然后进行处理。如下实现类RpcHelloServiceImpl继承于RpcHelloServiceGrpc.RpcHelloServiceImplBase并重写sayHello方法:3.然后可以在IDEA的右边看到如下所示的编译选项,故直接执行即可编译出对应的Java类文件,最后打包成标准的jar被Grpc服务端和Grpc客户端引用即可。2.实现RPC服务的方法和Grpc服务端1.通常步骤1编译得到的接口文件为RpcHelloServiceGrpc,所以RPC服务方法的实现主要是通过继承RpcHelloServiceGrpc的静态内部类RpcHelloServiceImplBase并重写对应的方法来实现业务逻辑。

概述

  • GRPC是Google开发的一款高性能、跨语言的RPC框架,使用Google的数据序列化框架protobuf作为IDL(接口定义语言)跨语言的服务接口定义,以及数据序列化。在通信层面基于HTTP3.0实现,这是与大多数RPC框架基于TCP实现不一样的,主要原因是HTTP2.0在性能方面有了比较大的提升。除此之外,Grpc的设计的其中一个目的就是提供移动客户端与服务端的RPC调用,所以基于HTTP协议实现可以应对TCP层面会遇到的内网防火墙问题。
  • 以下使用Java语言实现一个HelloWorld项目来展示Grpc和protobuf的相关使用方法。项目完整源码在个人Github:Github grpc-demo

1. 使用protobuf定义RPC服务接口与相关数据结构

1.使用protobuf文件来定义业务数据类型和RPC服务方法并编译。如下在hello_message.proto文件定义数据结构,在rpc_hello_service.proto文件中定义服务方法,实现如下:(关于protobuf的更多语言可以参考官方文档)

  • hello_message.proto:定义了请求数据结构HelloRequest,响应数据结构HelloResponse。

rpc框架基本原理(Gprc和protobuf使用例子解析)(1)

  • rpc_hello_service.proto:声明了一个RpcHelloServer服务接口和一个sayHello方法。

rpc框架基本原理(Gprc和protobuf使用例子解析)(2)

2.接着需要编译为Java对应的类文件,可以使用命令来生成,不过一般会结合maven的编译插件来实现,这样可以在IDEA直接编译,如下为maven的插件配置:

rpc框架基本原理(Gprc和protobuf使用例子解析)(3)

3.然后可以在IDEA的右边看到如下所示的编译选项,故直接执行即可编译出对应的Java类文件,最后打包成标准的jar被Grpc服务端和Grpc客户端引用即可。

rpc框架基本原理(Gprc和protobuf使用例子解析)(4)

2.实现RPC服务的方法和Grpc服务端

1.通常步骤1编译得到的接口文件为RpcHelloServiceGrpc,所以RPC服务方法的实现主要是通过继承RpcHelloServiceGrpc的静态内部类RpcHelloServiceImplBase并重写对应的方法来实现业务逻辑。

如下实现类RpcHelloServiceImpl继承于RpcHelloServiceGrpc.RpcHelloServiceImplBase并重写sayHello方法:

rpc框架基本原理(Gprc和protobuf使用例子解析)(5)

2.Grpc服务端的核心实现如下:主要是在指定的端口监听Grpc客户端的RPC请求到来,然后进行处理。

rpc框架基本原理(Gprc和protobuf使用例子解析)(6)

3.实现Grpc客户端

1.首先通过指定Grpc服务端的域名host和监听端口号port来创建Grpc客户端和Grpc服务端通信的channel,然后需要创建该RPC服务对应的服务端点(stub),如下:

rpc框架基本原理(Gprc和protobuf使用例子解析)(7)

2.然后通过该RPC服务端点来对Grpc服务端发起对该RPC服务端点的RPC方法调用:

rpc框架基本原理(Gprc和protobuf使用例子解析)(8)

猜您喜欢: