客户端|基于GRPC搭建高性能/跨平台微服务框架?

客户端|基于GRPC搭建高性能/跨平台微服务框架?

文章图片

客户端|基于GRPC搭建高性能/跨平台微服务框架?

文章图片

客户端|基于GRPC搭建高性能/跨平台微服务框架?

文章图片

客户端|基于GRPC搭建高性能/跨平台微服务框架?

文章图片

客户端|基于GRPC搭建高性能/跨平台微服务框架?

文章图片

客户端|基于GRPC搭建高性能/跨平台微服务框架?

文章图片

客户端|基于GRPC搭建高性能/跨平台微服务框架?

本文我们来讲解一下如何使用 gRPC构建微服务 , gRPC是一个开源框架 , 可用于构建可扩展且高性能的微服务并创建服务之间的通信 。

背景随着企业越来越多地转向微服务 , 对构建这些微服务的低延迟和可扩展框架的需求也在增加 。 为了满足这一需求 , 各种工具和框架提供商正加快满足微服务需求 。 同时从构建大型微服务应用程序的经验中学习 , 技术专业人士分享他们对可重用组件的知识 , 以便其他人可以构建具有相同规模和性能的架构 。
什么是 gRPCgRPC 是一个开源框架(由 Google 创建) , 是一个通用的 RPC 框架 , 用于大规模构建具有高性能的网络应用程序 。 实现有多种语言版本 , 并且支持跨平台通信 。
使用场景gRPC 非常适合服务与服务之间的 RPC 通信 。 在这里 , 我们将使用 Java 来实现微服务和相关框架 , 让它的功能更齐全 。 为了让其他服务可以访问它 , 我们将创建一个包装 REST 服务 , 这个服务将使用 gRPC 客户端与 gRPC 服务进行通信 。

准备工作我们需要设置一个基础环境来构建和运行示例 。 基本要求是安装 Java 和 Maven 。 gRPC 工具和服务器运行时库等其他依赖项 , 将在构建过程中自动下载 。 有关构建应用程序所需的核心依赖项 , 请参阅下面的代码 。

核心功能gRPC 基本上是一种与平台和编码无关的协议 。 这意味着 , 您可以使用任何类型的编码 , 如二进制、JSON、XML 等 , 但推荐的方法是使用“protobuf” , 它使用专门的序列化/反序列化机制支持二进制编码 。 可插拔设计允许用户对其进行扩展以支持所需的平台和堆栈 。
protobuf 的核心构造是 proto IDL(接口定义语言) , 定义了消息类型和服务定义 。 它还提供了为所需平台生成模型类和服务接口的工具 。
消息类型我们可以从在.proto文件中定义消息类型的 proto 定义开始 。 看下面的例子 。

有关数据类型和关键字的完整参考 , 请参阅proto3文档 。
Protobuf 提供了一种工具 , 可以根据适用于您的平台/编程语言的消息定义为模型类生成代码 。 以下命令将根据给定的消息定义在 Java 中生成account类 。
$ > protoc -I=proto-demo --java_out=proto-demo account.proto

服务定义gRPC 服务定义是一组需要对定义的消息类型执行的操作 。 这些操作可以采用以下四种通信形式之一:

  1. 单通道 RPC — 它是最简单的通信形式 。 它本质上是同步的 , 允许用户以阻塞模式发送请求并等待响应 , 直到服务器完成处理 。
  2. 流式 RPC — 在这种形式中 , 客户端一次性发送数据 , 但服务器以流的形式返回响应 。
  3. 客户端流式 RPC — 与服务器流式传输不同 , 在这种形式中 , 客户端以流的形式发送请求的数据 , 服务器将数据作为一个整体返回 。
  4. 双向流式 RPC — 在这种形式中 , 服务器和客户端都支持根据请求和响应流式传输数据 。

具有标准 CRUD 操作的消息类型的示例服务定义将采用以下输入:

gRPC-Java 实现提供的扩展工具有助于根据域逻辑和服务器存根生成用户需要实现的服务接口 , 客户端将使用这些存根调用已部署的服务 。

标准服务器和客户端gRPC-Java 库提供了一个响应式服务器实现(基于 Netty)来部署您的服务和一个阻塞/非阻塞客户端实现来连接您的服务和其他服务 。
您需要注册您的服务实现并以编程方式启动服务器 。