构建你的第一个gRPC服务(part 1)
如果你是一个新手,你一定被创建一个gRPC服务的复杂流程折磨过。 没错,protoc编译器是很强大, 有很多插件可以使用并通过创建服务器端或者客户端代码框架帮助你创建一个gRPC服务。但是,这整个过程很少有工具可以帮助你自动做到,你需要花费很多时间去学习和整理如何使用protoc来创建你的项目代码结构,然后你才能开始实现你的业务逻辑。
今天,我来介绍一个可以帮助你通过可视化工具快速完成你的服务创建的工具skemaloop。
How gRPC works
在正式开始之前, 我来先简单介绍一下gRPC的工作原理。详细信息你可以在网上找到很多相关的文档和新手指南。
gRPC是通过接口定义语言(Interface Definition Language)IDL来定义服务器端和客户端的协议(Schema Contract),并且通过IDL来创建服务端框架代码、客户端框架代码和桩代码stub来完成服务器端和客户端的RPC调用。桩代码(stub)可以用来完成通信的序列化和反序列化操作,框架代码实现主调和被调的数据封装和业务逻辑封装。
为了创建一个gRPC服务,需要完成以下几个步骤。
- 创建协议,通过创建protobuf文件,并定义好接口通信的消息定义和RPC接口定义。
- 生成客户端和服务器端的框架代码和桩代码。
- 在客户端和服务器端框架代码内实现你的业务逻辑。
Create Schema
创建协议是完成你的第一个gRPC服务的前提。在本篇文章中,我使用skemaloop这个gRPC开发者套件来完成协议的创建。
在正式开始之前,你首先需要保证你已经有一个你自己的github账户。你需要登录skemaloop主页,通过你的github登录skemaloop的SaaS平台。
在完成登陆以后,你就可以开始创建你的Schema。
在创建schema的时候,有几个关键概念需要澄清。 协议模块,即module作为管理协议的最高层级的集合,可以包含一个或多个包(package),包(package)可以包含一个或多个协议定义文件,即protobuf。在我的例子中,我使用sample_module和sample_pacakge分别做为我们协议的模块和包名称。
我在这里创建一个名称为SayHi的服务,对应一个SayHi的协议定义文件。
syntax = "proto3";
//package code generated by schemakit DO NOT EDIT.
package sample_module.sample_package;
message HelloRequest {
string msg = 1;
}
message HelloReply {
string msg = 1;
string code = 2;
}
service SayHi {
rpc SayHello (HelloRequest) returns (HelloReply);
}
在下一篇文章中,我将介绍如何使用这个协议定义文件来创建桩代码(stub)和服务端代码框架,来完成一个简单的gRPC服务的。