响应式编程:Vert.x官网学习
本文基于 Vert.x 官网 https://vertx.io/ 内容,带领大家学习响应式编程里比较有名的工具包 Vert.x 。文章内容取自官网由博主简化总结,希望帮助大家理解响应式编程。
- Vert.x 简介
- Vert.x 特性
- 响应式模式概述
推荐博主开源的 H5 商城项目waynboot-mall,这是一套全部开源的微商城项目,包含三个项目:运营后台、H5 商城前台和服务端接口。实现了商城所需的首页展示、商品分类、商品详情、商品 sku、分词搜索、购物车、结算下单、支付宝/微信支付、收单评论以及完善的后台管理等一系列功能。 技术上基于最新得 Springboot3.0、jdk17,整合了 MySql、Redis、RabbitMQ、ElasticSearch 等常用中间件。分模块设计、简洁易维护,欢迎大家点个 star、关注博主。
github 地址:https://github.com/wayn111/waynboot-mall
Vert.x简介

先了解 Vert.x 是什么,官网首页介绍文字可以看出 Vert.x 是由 Eclipse 开发的一个在 JVM 上 Reactive(响应式) 应用程序。
Reactive(响应式)编程是什么?
响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
例如在命令式编程设置中,a = b + c 意味着在计算表达式时 a 被分配为 b + c 的结果,之后 b 和 c 的值进行修改也不会影响 a 值。但是在响应式编程中,只要 b 或 c 的值发生变化,a 的值就会自动更新,而程序无需显式地重新执行语句 a = b + c 来确定当前分配的 a 值。
官网定义
官网对于 Vert.x 的定义是:一个用于在 JVM 上构建响应式应用程序的工具包。
注意 Vert.x 是一个工具包,不是框架。
响应式应用程序既可以随着工作负载的增长而扩展,也可以在出现故障时具有弹性。响应式应用程序具有响应能力,因为它通过有效利用系统资源并保护自身免受错误的影响来控制延迟。
响应式编程不仅仅是体现在编码 a = b + c 上,更体现在由其开发出的程序的高性能和扩展性上。

Vert.x 还有一个大型响应式模块生态系统(即由 Eclipse 主导的 Vert.x 社区)来提供支持,其中包含编写现代服务时所需的任何内容:全面的 Web 技术栈、响应式数据库驱动程序、消息传递、事件流、集群、指标、分布式跟踪等。
Vert.x特性
官网对 Vert.x 的五个特性进行了阐述。

Resource-efficient(资源利用)
与基于阻塞 I/O 的传统技术和框架相比,可以用更少的资源处理更多的请求。 Vert.x 非常适合各种执行环境,包括虚拟机和容器等受限环境。
划重点:不浪费资源,提高部署密度,省钱!
Concurrent and asynchronous(并发和异步)
通常其他人告诉你异步编程很难,但我们努力使 Vert.x 编程变得很简单,适合大多数人,同时不牺牲正确性和性能。
你可以选择最适合当前任务的模型:callback、Promise、Future、响应式扩展和 (Kotlin) 协程。
Flexible(使用灵活)
Vert.x 是一个工具包,而不是一个框架,因此它自然具有很强的可组合性和可嵌入性。Vert.x 对你的应用程序结构应该没有要求。
选择你需要的模块和客户端,并在构建应用程序时组合它们。 Vert.x 将始终根据你的需求进行调整和扩展。
Vert.x is fun(编码有趣)
忘记复杂性和昂贵的抽象。使用 Vert.x,编写的内容实际上就是要执行的内容!回归简单的设计,忘记一些既定的“最佳实践”,并享受编写易于理解的代码是不会让你失望的。
我们还有一个友好的社区,因此你可以向在各种环境中使用过 Vert.x 的人们学习。
Ecosystem(生态系统)
Web API、数据库、消息传递、事件流、云、注册表、安全性等应有尽有。 Vert.x 提供了适用于现代应用程序的全面的端到端响应式客户端技术栈。
如果你找不到想要的东西,那么很有可能其他人已经在更广泛的 Vert.x 开源生态系统中找到了它。 Vert.x 对于你的技术栈来说是一项很安全的投资。
响应式模式概述
最开始是线程
并发的经典方法是使用线程。多个线程可以存在于单个进程中,执行并发工作并共享相同的内存空间。
大多数应用程序和服务开发框架都基于多线程。从表面上看每个连接都有 1 个线程的模型令人放心,因为开发人员可以依赖传统的命令式代码。
多线程“简单”但有限
当工作负载超出中等工作负载时会发生什么? (参见 C10k 问题)
C10K 问题就是如何一台物理机上同时服务 10000 个用户?C 代表并发,10K 就是 10000
发生:正在进行的请求会创建大量线程,因而需要进行大量上下文切换工作,导致机器资源利用效率偏低。
请求执行时,有些线程因为在等待 I/O 操作完成会被阻塞,有些线程准备处理 I/O 结果,有些线程正在执行 CPU 密集型任务。
现代内核有非常好的调度程序,但你不能指望它们能够像处理 5 000 个线程那样轻松地处理 50 000 个线程。而且线程并不便宜,创建一个线程需要几毫秒,而一个新线程则需要大约 1MB 内存。
异步编程:可扩展性和资源效率
使用异步 I/O 时,可以使用更少的线程处理更多并发连接。当 I/O 操作发生时,我们不会阻塞线程,而是继续执行另一个已准备好进行的任务,并在准备就绪后恢复初始任务。
Vert.x 使用事件循环来实现并发工作负载。
在事件循环上运行的代码不应执行阻塞 I/O 或冗长的处理。但如果你有这样的代码,请不要担心,Vert.x 有工作线程和 API 来处理事件循环中的事件。
选择最佳的异步编程模型
我们知道异步编程需要付出更多的努力。在 Vert.x 的核心,我们支持 callbacks 和 Promise/Futures,后者是用于链接异步操作的简单而优雅的模型。
RxJava 虽然可以实现高级响应式编程,但如果你更喜欢更接近传统命令式编程的方式,那么我们很高兴为你提供 Kotlin 协程的一流支持。
不要让失败破坏响应能力
失败总是会发生。数据库将出现故障,网络将出现故障,或者依赖的某些服务将变得无响应。
Vert.x 提供了控制延迟的工具,包括简单高效的断路器。
丰富的生态系统
Vert.x 生态包含用于构建现代端到端响应式服务的模块。从高效的响应式数据库客户端到事件流、消息传递和 Web 技术栈,Vert.x的各个模块可以分为以下几类:
- 核心模块:vertx-core,提供了基础的TCP、HTTP、文件系统、事件总线等功能,是其他模块的基础。
- Web模块:vertx-web,提供了路由器、模板引擎、身份验证、Web客户端等功能,可以方便地开发Web应用。
- 数据访问模块:vertx-jdbc-client,vertx-mongo-client,vertx-redis-client,vertx-mysql-client等,提供了对各种数据库的异步访问支持。
- 消息模块:vertx-rabbitmq-client,vertx-kafka-client,vertx-amqp-client等,提供了对各种消息中间件的异步访问支持。
- 各语言模块:Vert.x 支持多种编程语言,如Java、JavaScript、Ruby、Python、Groovy、Scala等,并提供了友好的API接口。
- 微服务模块:vertx-service-discovery,vertx-circuit-breaker,vertx-config等,提供了服务发现、熔断器、配置管理等功能,可以帮助开发微服务应用。
- 其他模块:还有一些其他的模块,如vertx-mail-client,vertx-auth-common,vertx-dropwizard-metrics等,提供了邮件客户端、认证、监控等功能。
总结
Vert.x 是一个基于 JVM 的轻量级、高性能响应式工具包,适用于最新的服务端后台、互联网、企业应用架构。Vert.x 基于全异步的事件驱动和非阻塞的 IO 模型,可以使用很少的线程资源处理大量并发请求。Vert.x 还提供了分布式系统、微服务、数据库、消息传输、web开发支持等特性,使得开发者可以轻松编写响应式应用程序,具有很好的扩展性和可靠性。
本文讲解到此结束,希望对你了解 Vert.x 有所帮助。
关注公众号【waynblog】每周分享技术干货、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力!
响应式编程:Vert.x官网学习的更多相关文章
- 【HTML响应式项目】成人教育官网前端页面(HTML+CSS+JS实现三端适应)
这个页面是在校参赛的小组项目,除首页和所有课程页面以外由组内成员编写,发博客纯属记录. 项目源码已上传至码云仓库:https://gitee.com/ynavc/sss 项目演示地址:http://y ...
- [转]springboot2 webflux 响应式编程学习路径
原文链接 spring官方文档 springboot2 已经发布,其中最亮眼的非webflux响应式编程莫属了!响应式的weblfux可以支持高吞吐量,意味着使用相同的资源可以处理更加多的请求,毫无疑 ...
- springboot2 webflux 响应式编程学习路径
springboot2 已经发布,其中最亮眼的非webflux响应式编程莫属了!响应式的weblfux可以支持高吞吐量,意味着使用相同的资源可以处理更加多的请求,毫无疑问将会成为未来技术的趋势,是必学 ...
- 学习响应式编程 Reactor (1) - 响应式编程
响应式编程 命令式编程(Imperative Programing),是一种描述计算机所需做出的行为的编程范式.详细的命令机器怎么(How)去处理以达到想要的结果(What). 声明式编程(Decla ...
- 函数响应式编程及ReactiveObjC学习笔记 (-)
最近无意间看到一个视频讲的ReactiveObjC, 觉得挺好用的 但听完后只是了解个大概. 在网上找了些文章, 有的写的比较易懂但看完还是没觉得自己能比较好的使用RAC, 有的甚至让我看不下去 这两 ...
- 【响应式编程的思维艺术】 (1)Rxjs专题学习计划
目录 一. 响应式编程 二. 学习路径规划 一. 响应式编程 响应式编程,也称为流式编程,对于非前端工程师来说,可能并不是一个陌生的名词,它是函数式编程在软件开发中应用的延伸,如果你对函数式编程还没有 ...
- 学习响应式编程 Reactor (2) - 初识 reactor
Reactor Reactor 是用于 Java 的异步非阻塞响应式编程框架,同时具备背压控制的能力.它与 Java 8 函数式 Api 直接集成,比如 分为CompletableFuture.Str ...
- 学习响应式编程 Reactor (4) - reactor 转换类操作符(1)
Reactor 操作符 数据在响应式流中的处理,就像流过一条装配流水线.Reactor 既是传送带,又是一个个的装配工或机器人.原材料从源头(最初的 Publisher )流出,经过一个个的装配线中装 ...
- Angular4学习笔记(五)- 数据绑定、响应式编程和管道
概念 Angular中的数据绑定指的是同一组件中控制器文件(.ts)与视图文件(.html)之间的数据传递. 分类 流向 单向绑定 它的意思是要么是ts文件为html文件赋值,要么相反. ts-> ...
- 【SpringBoot】SpringBoot2.0响应式编程
========================15.高级篇幅之SpringBoot2.0响应式编程 ================================ 1.SprinBoot2.x响应 ...
随机推荐
- CI框架内置分页代码
Controller 控制器代码 <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Welc ...
- .NET快速开发框架-RDIFramework.NET 全新EasyUI版发布
RDIFramework.NET,基于.NET的快速信息化系统快速开发框架.10年专注.易上手.多组件.全源码.可灵活构建各类型系统. 1.RDIFramework.NET快速开发框架简介 RDIFr ...
- Windows防病毒Defender 排除病毒误报
开发的软件安装后,windows上提示病毒,默默被系统删除了. 一开始以为是自己软件的签名问题,后面发现,将被隔离的文件还原,文件的签名是存在的. 这是微软denfender的误报,为啥会报病毒呢? ...
- C# 打开蓝牙设置界面
蓝牙设置相关界面,以下是通过C#方式打开的几个方式,记录一下 蓝牙设置界面 1.控制面板命令bthprops.cpl 可以用控制面板 control+bthprops.cpl,也可以直接bthprop ...
- 【解决方法】白嫖利用WPS自带C盘清理大师,清理C盘空间,自测清理19.5G空间,太感人了!
环境: 工具:WPS-WPS清理大师 系统版本:Windows 10 问题描述: 描述:本人C盘常年不足10G,也用过一些其他的清理工具,但是也不懂,不敢乱删除东西.一直得过且过. 由于C盘中有很多的 ...
- .NET Core 波场链离线签名、广播交易(发送 TRX和USDT)笔记
Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. ...
- 2015年5月最新win7纯净版系统(32位)补丁最新
下载地址: http://yunpan.cn/cVN9e679hZ2Pe 访问密码 203a 一.系统安装工具 √ 自由天空最新万能驱动 √ 一键GHOST备份还原系统 √ 硬盘安装系统安装器,增 ...
- selenium配置远程测试环境
开头 因为测试的时候需要不断打开浏览器,这样效率感觉不高,于是想着能不能开启一个浏览器,然后通过代码直接链接来调试就好了. 前提 要先安装好selenium 和 会查看配置自己的google版本和路径 ...
- 2020-10-25:go中channel的close流程是什么?
福哥答案2020-10-25:
- 1451, 'Cannot delete or update a parent row: a foreign key constraint fails
问题描述:1451, 'Cannot delete or update a parent row: a foreign key constraint fails (`sysProDB4`.`IM003 ...