第五章: 超越回调: 5.1 组合异步操作:边缘服务示例

翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion)

本章涵盖了

  • 回调及其限制,如网关/边缘服务示例所示
  • Futures 和 Promise - 链接异步操作的简单模型
  • 反应式扩展 - 一种更强大的模型,特别适合组合异步事件流
  • Kotlin 协程 - 对异步代码执行流程的语言级支持

在开发响应式应用程序时,您将需要编写各种各样的业务逻辑,并不是所有的逻辑都很容易用异步形式表示。虽然回调是异步事件通知的一种简单形式,但它们很容易使异步代码变得复杂。

让我们看一个真实的例子,说明为什么回调并不总是最好的异步编程模型。 然后我们将探索 Vert.x 支持的多个选项。

5.1 组合异步操作:边缘服务示例

我们将以一个“边缘服务”为例来说明如何使用不同的异步编程模型组合异步操作。

边缘服务也经常被称为 API 网关。 它是一种服务,作为其他服务的外观,因此请求者只需处理一个服务接口,而不必与每个服务进行对话。 边缘服务还可以执行其他任务,例如数据转换和与其他服务交互,因此它不仅仅是方便地聚合来自多个服务的数据。

5.1.1 场景

让我们回到我们在第 3 章中使用的热传感器 Verticle。假设我们有几个热传感器,并且我们想要公开一个 API 来获取和聚合所有传感器的热数据。 这是一个非常简单但有效的边缘服务示例,因为它抽象了请求者了解和联系所有传感器的需求。 为了让事情变得更有趣,我们还将有一个 snapshot 服务,在传感器值返回给请求者之前捕获并记录它们。 整个场景如图 5.1 所示。

请求者向边缘服务发出请求,边缘服务又从传感器服务中获取温度数据。 每个传感器都公开一个 HTTP/JSON API,边缘服务将所有响应聚合在一个更大的 JSON 文档中。
在这里插入图片描述
在这里插入图片描述
然后将该文档发送到快照服务,然后再发送回请求者。 交互过程总结在 图5.2 中。

这个例子允许我们推理并行和顺序操作:

  • 并行异步操作:获取热传感器数据
  • 顺序异步操作:聚合热传感器数据,发送到快照服务,然后返回给请求者

5.1.2 热传感器verticles

我们可以将我们的热传感器部署为多个独立的进程,每个进程都公开一个 HTTP API。 为了简化我们的示例,我们将在同一进程中部署它们,尽管 HTTP 服务器侦听不同的 TCP 端口。

下面的 HeatSensor 类是对我们之前使用的类的简单改编。 清单 5.1 显示了该类的前面一些代码,直接从第 3 章中的代码移植而来。
在这里插入图片描述
代码保持相同的随机更新温度逻辑,随机延迟在 1 到 6 秒之间。

以下清单显示了为公开 HTTP API 而添加的代码。
在这里插入图片描述

这是对 Vert.x HTTP 服务器的非常直接的使用,HTTP 端口通过配置传递。 响应以 JSON 编码。

5.1.3 快照服务verticle

快照服务也公开了一个 HTTP 服务器,如下面的清单所示。
在这里插入图片描述
HTTP 请求处理程序需要一个 HTTP POST 请求,使用主体处理程序提取主体,并记录接收到的数据。

定义了这两个 Verticle,现在可以开始有趣的事情了,我们可以考虑制作我们的边缘服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值