响应式编程: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响应 ...
随机推荐
- Java设计模式 —— 单例模式
6 单例模式 6.1 单例模式概述 Singleton Patter:确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例. 单例模式有3个要点: 该类只能有一个实例 该类必须自行创建这个实 ...
- DG:模拟failover故障与恢复
问题描述:情形是当主库真正出现异常之后,才会执行的操作,那么我们执行过failover 之后,如何在重新构建DG,这里我们利用flashback database来重构.模拟前主库要开启闪回区,否则要 ...
- ChatGPT研究报告:AIGC带来新一轮范式转移
以ChatGPT为代表的AIGC(人工智能生成内容)将成为新一轮范式转移的开始. 本文约4000字,目标是快速建立AIGC知识体系,含有大量的计算专业名词,建议阅读同时扩展搜索. 一.行业现状 1.概 ...
- 【LeetCode】3.19 对称二叉树
101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称. 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root = [1 ...
- .NET Core反射获取带有自定义特性的类,通过依赖注入根据Attribute元数据信息调用对应的方法
前言 前段时间有朋友问道一个这样的问题,.NET Core中如何通过Attribute的元数据信息来调用标记的对应方法.我第一时间想到的就是通过C#反射获取带有Custom Attribute标记的类 ...
- 【ACM算法竞赛日常训练】DAY16【奇♂妙拆分】【区区区间间间】【小AA的数列】数学 | 位运算 | 前缀和
DAY16共3题: 奇♂妙拆分(简单数学) 区区区间间间(单调栈) 小AA的数列(位运算dp) 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通俗易懂的方式讲解算法!️ ...
- 计算机网络之MAC和IP地址
MAC地址 在局域网中,硬件地址,又称为物理地址或MAC地址. 目前现在的局域网中实际上使用的都是6字节的MAC地址,所以每一个以太网设备都具有唯一的MAC地址. MAC地址的格式 假设传输使用的是I ...
- 试用「ChatGPT」几周之后
冷静下来,不吹不黑. 01 最近半年,互联网一款现象级的应用诞生:「ChatGPT」: 其火爆的程度,不输前面的羊了个羊: 最初了解到ChatGPT还是春节的时候,但那时网上的测评还没引起足够的好奇心 ...
- Pwn系列之Protostar靶场 Stack2题解
(gdb) disass main Dump of assembler code for function main: 0x08048494 <main+0>: push ebp 0x08 ...
- google + chatgpt
google注册 网址:https://www.google.com/ 使用右上角登录按钮 点击创建账户然后根据步骤注册 chagpt注册 1.https://chat.openai.com/auth ...