第九章: Vert.x 的消息传递和事件流 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖 消息传递与AMQP 使用Apache Kafka的事件流 发送邮件 消息和事件流中间件的集成测试 响应式应用程序非常适合消息传递和事件流技术。到目前为止,我们主要研究了公开HTTP 的 API服务。但是,尽管HTTP是与服务交互的通用且有效的协议,但它不应该是唯一的选择。 使用消息传递和事件流集成基于vert.x的服务有几个选项。本章主要介绍AMQP消息代理和Apache Kafka。我们还将讨论使用SMTP服务器发送电子邮件。 在这一章中,我们将深入研究摄取和祝贺服务的实现。摄取服务通过HTTP和AMQP接收来自设备的步骤更新,并将它们作为Kafka事件转发到系统中。祝贺服务会监听某些Kafka事件,以发现用户在一天内走了10,000步,并发送一封祝贺邮件。 9.1 使用 Vert.x 超越 HTTP 的事件驱动服务 作为事件驱动服务的网络接口,HTTP是一个明智的选择,特别是当服务提供API时....
第八章: Web 栈 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖 边缘服务和公共 API 的构建 Vert.x 网络客户端 JSON Web 令牌 (JWT) 和跨域资源共享 (CORS) 使用 Vert.x 服务和集成 Vue.js 反应式应用程序 使用 REST Assured 测试 HTTP API 响应式应用程序经常使用 HTTP,因为它是一种通用的协议,而 Vert.x 为 Web 技术提供了全面的支持。 Vert.x Web 栈提供了许多用于构建 Web 应用程序后端的工具。 其中包括高级路由、身份验证、HTTP 客户端等。 本章将指导您使用 JSON Web 令牌 (JWT) 公开 HTTP API 以进行访问控制,向其他服务发出 HTTP 请求,以及构建连接到 HTTP API 的反应式单页应用程序。 ?注意: 本书不涵盖以下来自 Vert.x Web 栈的值得注意的元素,这些元素在本书的这一部分构建应用程序时不需要:使用正则表达式进行路由、cookie、服务器端会....
第七章: 设计一个反应式应用程序 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖 什么是反应式应用 介绍整个第2部分中使用的反应式应用程序方案 本书的第一部分教您使用Vert.x的异步编程。 这是编写可扩展和资源有效应用程序的关键。 现在是时候探索使应用程序 **反应式(reactive)**的原因了,因为我们努力提高可伸缩性和可靠性。 为此,我们将集中精力于从几个事件驱动的微服务中开发完全反应式应用程序。 在本章中,我们将指定这些服务。 7.1 是什么使应用程序具有反应性 在前几章中,我们介绍了反应式的一些元素: 背压,作为异步流处理中的必要成分,以调节事件吞吐量 反应式编程是组成异步操作的一种方式 现在是时候探索最后一个方面了: 反应式应用程序。 在第1章中,我总结了 反应式宣言,该声明反应式应用是: 响应式的,有复原力的,有弹性的和消息驱动的。 反应式应用程序的关键属性是,在苛刻的工作量和面对其他服务失败时,它们是响应良好的。 通过“响应迅速”,我们的意思是,服务响应的延迟仍处于控....
第六章: 超越事件总线 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖了 如何在事件总线上公开服务 Verticle 和事件总线服务的异步测试 事件总线是在 Vert.x 中表达事件处理的基本工具,但它还有更多功能! 事件总线服务对于公开类型化接口而不是简单的消息传递很有用,尤其是在事件总线目标处需要多种消息类型时。 测试也是一个重要的概念,我们将看看测试异步 Vert.x 代码与传统测试有什么不同。 在本章中,我们将重温前面的示例,将其重构为事件总线服务,并对其进行测试。 6.1 使用服务 API 重新审视热传感器 在第 3 章中,我们以热传感器为例。 我们有一个 SensorData verticle,它保存每个传感器的最后观察值,并使用事件总线上的请求/应答通信计算它们的平均值。 下面的清单显示了我们用来计算温度平均值的代码。 此代码与 Vert.x 事件总线 API 紧密耦合,因为它需要接收消息并回复它。 任何愿意调用 average 的软件组件都必须通过事件总线发送消息并期待响....
第五章: 超越回调 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖了 回调及其限制,如网关/边缘服务示例所示 Futures 和 Promise - 链接异步操作的简单模型 反应式扩展 - 一种更强大的模型,特别适合组合异步事件流 Kotlin 协程 - 对异步代码执行流程的语言级支持 在开发响应式应用程序时,您将需要编写各种各样的业务逻辑,并不是所有的逻辑都很容易用异步形式表示。虽然回调是异步事件通知的一种简单形式,但它们很容易使异步代码变得复杂。 让我们看一个真实的例子,说明为什么回调并不总是最好的异步编程模型。 然后我们将探索 Vert.x 支持的多个选项。 5.1 组合异步操作:边缘服务示例 我们将以一个“边缘服务”为例来说明如何使用不同的异步编程模型组合异步操作。 边缘服务也经常被称为 API 网关。 它是一种服务,作为其他服务的外观,因此请求者只需处理一个服务接口,而不必与每个服务进行对话。 边缘服务还可以执行其他任务,例如数据转换和与其他服务交互,因此它不仅仅是方便地聚合来....
第四章: 异步数据和事件流 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖了 为什么流是事件之上的有用抽象 什么是背压,以及为什么它是异步生产者和消费者的基础 如何从流中解析协议数据 到目前为止,我们一直在使用 callbacks 处理来自各种来源(例如 HTTP 或 TCP 服务器)的事件。回调函数允许我们一次推理一个事件。 处理来自TCP连接、文件或HTTP请求的传入数据缓冲区并没有太大的不同:您需要声明一个回调处理程序来响应每个事件并允许自定义处理。 也就是说,大多数事件需要作为一个系列而不是作为孤立事件来处理。处理HTTP请求正文就是一个很好的例子,因为需要组装几个不同大小的缓冲区来重新构建整个正文负载。由于响应式应用程序处理非阻塞I/O,高效和正确的流处理是关键。在本章中,我们将看看为什么流会带来挑战,以及Vert.x如何提供全面统一的流模型。 4.1 统一的流模型 Vert.x 提供跨多种类型资源的流的统一抽象,例如文件、网络套接字等。 read stream 是可以读取的事....
第三章: 事件总线:Vert.x 应用程序的支柱 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖了 事件总线是什么 如何通过事件总线进行点对点、请求-回复 和 发布/订阅 通信 用于通过网络进行verticle到verticle通信的分布式事件总线 上一章介绍了verticles。 一个 Vert.x 应用程序由一个或多个 Verticle 组成,每个 Verticle 形成一个处理异步事件的单元。 通常通过功能和技术问题来专门化 Verticle,例如有一个 Verticle 用于公开 HTTP API,而另一个 Verticle 用于处理数据存储。 这种设计还鼓励部署给定 Verticle 的多个实例以实现可扩展性目的。 我们尚未介绍的是verticles如何相互交流。 例如,如果较大的Vert.x应用程序要执行任何有用的事情,则HTTP API Verticle需要与数据存储verticle交谈。 连接verticles并确保它们能够合作是“事件总线”的作用。在构建响应式应用程序时....
第二章: Vert.x的基本处理单元-Verticles 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖了 什么是 verticles 如何编写、配置和部署 verticles Vert.x线程模型 如何混合Vert.x和非Vert.x线程 简单地说,verticle是Vert.x中的基本处理单元。verticle的作用是封装一个处理事件的“技术功能单元”,例如公开HTTP API和响应请求、在数据库之上提供存储库接口或向第三方系统发出请求。与Enterprise JavaBeans等技术中的组件一样,verticle也可以被部署,并且它们有一个生命周期。 异步编程是构建响应式应用程序的关键,因为它们必须具有伸缩性,而verticle是Vert.x中结构化(异步)事件处理代码和业务逻辑的基础。 2.1 编写一个verticle 如果您熟悉actor并发模型,您将发现Vert.x的verticle和actor之间的相似之处。简单地说,在actor模型中,自治实体(actor)通过发送和响应....
第十三章: 最后说明:容器原生的Vert.x 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖 使用Jib高效地构建容器图像 配置Vert.x集群以在Kubernetes集群中工作 在Kubernetes集群中部署Vert.x服务 使用Skaffold和Minikube进行本地开发 公开运行状况检查和度量 到目前为止,您应该对什么是响应式应用程序有了深刻的理解,以及Vert.x如何帮助您构建可伸缩的、资源高效的和有弹性的服务。在本章中,我们将讨论一些与在Kubernetes集群容器环境中部署和操作Vert.x应用程序相关的主要问题。您将学习如何准备Vert.x服务以便在Kubernetes中良好地工作,以及如何使用有效的工具打包容器映像并在本地运行它们。您还将了解如何公开运行状况检查和指标,以便在容器环境中更好地集成服务。 这一章是可选的,因为这本书的核心目标是教会你自己反应式的概念和实践。尽管如此,Kubernetes仍然是一个流行的部署目标,并且值得学习如何使Vert.x应用程序在这种....
第十二章: 通过负载和混乱测试实现响应性 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖 用Locust模拟用户 使用Hey负载测试HTTP端点 使用Pumba进行混乱测试 通过显式超时、断路器和缓存来减少故障 现在,我们涵盖了1万步挑战应用程序的所有重要技术部分:如何构建Web API,Web应用程序和边缘服务,以及如何使用数据库并执行事件流处理。 通过使用Vert.x的异步和响应式编程,我们可以期望形成该应用程序的一组服务是 响应式:当工作负载增长时可伸缩,当故障发生时具有弹性。 我们构建的服务实际上是响应式的吗?现在让我们通过测试和实验来发现这一点,并看看我们可以在哪些方面做出改进。 为此,我们将使用负载测试工具来强调服务和测量延迟。然后,我们将使用混乱测试工具添加失败,以了解这是如何影响服务行为的,我们将讨论修复我们发现的问题的几种选项。您也可以在自己的项目中应用此方法。 软件版本 本章使用以下工具版本编写和测试: Locust 1.0.3 Python 3.8.2 Hey 0.....
第十一章: 端到端的实时反应式事件处理 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖 结合RxJava操作符和Vert.x客户端来支持高级处理 使用RxJava操作符在事件流上执行内容充实和聚合数据处理 将Vert.x事件总线扩展到web应用程序,以统一后端和前端通信模型 在流处理设置中管理状态 在本章中,我们将探索高级反应式流处理,其中应用程序状态会根据事件进行实时更改。 通过对事件执行转换和聚合,我们将计算有关在更大的 1万 步应用程序中发生的事情的实时统计信息。 您还将了解事件流如何通过在 Vert.x 事件总线保护伞下统一 Java 和 JavaScript 代码来影响实时 Web 应用程序。 本章首先介绍使用 RxJava 运算符和 Vert.x 客户端的高级流处理。 然后,我们将讨论通过事件总线连接的实时 Web 应用程序这一主题,最后我们将介绍在连续事件的上下文中正确处理状态(尤其是 initial 状态)的技术。 11.1 使用 Kafka 和 RxJava 进行高级流....
第十章: 使用数据库进行持久状态管理 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 本章涵盖 使用 MongoDB 存储数据和验证用户 从 Vert.x 使用 PostgreSQL 与数据库交互的事件驱动服务的集成测试策略 响应式应用程序倾向于无状态设计,但是状态必须在某个地方进行管理。 数据库在大多数应用程序中都是必不可少的,因为需要存储、检索和查询数据。 数据库可以存储各种数据,例如应用程序状态、事实或用户凭据。 市场上有不同类型的数据库:一些是通用的,而另一些则专门用于某些类型的用例、访问模式和数据。 在本章中,我们将通过深入研究用户和活动服务的实现来探索 Vert.x 的数据库和状态管理。 这些服务将允许我们使用面向文档的数据库 (MongoDB) 和关系数据库 (PostgreSQL)。 您还将了解如何使用 MongoDB 对用户进行身份验证,以及如何为数据驱动的服务编写集成测试。 10.1 数据库 和 Vert.x Vert.x 提供了广泛的客户端来连接数据源。 这些客户端包含与服务....
第一章: Vert.x 异步编程的基础知识 翻译: 白石(https://github.com/wjw465150/Vert.x-in-Action-ChineseVersion) 构建反应式系统的第一步是采用异步编程。基于阻塞I/O的传统编程模型的可伸缩性不如使用非阻塞I/O的模型。用更少的资源服务更多的请求是非常有吸引力的,那么问题在哪里呢?这里确实存在一个小问题:如果您从未接触过异步编程,那么它是一种重要的范式转换! 本书这部分的章节将通过使用Vert.x工具包教你异步编程的基本概念。使用Vert.x思考异步操作绝对是可行的(而且很有趣!),我们将探讨Vert.x应用程序的主要构建块。 本章涵盖了 Vert.x 是什么 为什么不能避免分布式系统 编程资源高效的网络应用程序的挑战 什么是异步和非阻塞编程 什么是响应式应用程序,以及为什么异步编程还不够 Vert.x 的替代品 我们开发人员生活在一个充满流行语、技术和实践炒作周期的行业。 我长期教大学生设计、编程、集成和部署应用程序的要素,我亲眼目睹了新手在当前技术的狂野海洋中航行是多么的艰难。 Asynchronous 和 reac....