本文基于 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 的核心,我们支持 callbacksPromise/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官网学习的更多相关文章

  1. 【HTML响应式项目】成人教育官网前端页面(HTML+CSS+JS实现三端适应)

    这个页面是在校参赛的小组项目,除首页和所有课程页面以外由组内成员编写,发博客纯属记录. 项目源码已上传至码云仓库:https://gitee.com/ynavc/sss 项目演示地址:http://y ...

  2. [转]springboot2 webflux 响应式编程学习路径

    原文链接 spring官方文档 springboot2 已经发布,其中最亮眼的非webflux响应式编程莫属了!响应式的weblfux可以支持高吞吐量,意味着使用相同的资源可以处理更加多的请求,毫无疑 ...

  3. springboot2 webflux 响应式编程学习路径

    springboot2 已经发布,其中最亮眼的非webflux响应式编程莫属了!响应式的weblfux可以支持高吞吐量,意味着使用相同的资源可以处理更加多的请求,毫无疑问将会成为未来技术的趋势,是必学 ...

  4. 学习响应式编程 Reactor (1) - 响应式编程

    响应式编程 命令式编程(Imperative Programing),是一种描述计算机所需做出的行为的编程范式.详细的命令机器怎么(How)去处理以达到想要的结果(What). 声明式编程(Decla ...

  5. 函数响应式编程及ReactiveObjC学习笔记 (-)

    最近无意间看到一个视频讲的ReactiveObjC, 觉得挺好用的 但听完后只是了解个大概. 在网上找了些文章, 有的写的比较易懂但看完还是没觉得自己能比较好的使用RAC, 有的甚至让我看不下去 这两 ...

  6. 【响应式编程的思维艺术】 (1)Rxjs专题学习计划

    目录 一. 响应式编程 二. 学习路径规划 一. 响应式编程 响应式编程,也称为流式编程,对于非前端工程师来说,可能并不是一个陌生的名词,它是函数式编程在软件开发中应用的延伸,如果你对函数式编程还没有 ...

  7. 学习响应式编程 Reactor (2) - 初识 reactor

    Reactor Reactor 是用于 Java 的异步非阻塞响应式编程框架,同时具备背压控制的能力.它与 Java 8 函数式 Api 直接集成,比如 分为CompletableFuture.Str ...

  8. 学习响应式编程 Reactor (4) - reactor 转换类操作符(1)

    Reactor 操作符 数据在响应式流中的处理,就像流过一条装配流水线.Reactor 既是传送带,又是一个个的装配工或机器人.原材料从源头(最初的 Publisher )流出,经过一个个的装配线中装 ...

  9. Angular4学习笔记(五)- 数据绑定、响应式编程和管道

    概念 Angular中的数据绑定指的是同一组件中控制器文件(.ts)与视图文件(.html)之间的数据传递. 分类 流向 单向绑定 它的意思是要么是ts文件为html文件赋值,要么相反. ts-> ...

  10. 【SpringBoot】SpringBoot2.0响应式编程

    ========================15.高级篇幅之SpringBoot2.0响应式编程 ================================ 1.SprinBoot2.x响应 ...

随机推荐

  1. Numpy浅拷贝与深拷贝

    Numpy中的浅拷贝与深拷贝 浅拷贝 共享内存地址的两个变量,当其中一个变量的值改变时另外一个也随之改变. Example a = np.array([1, 2, 3, 4, 5]) b = a pr ...

  2. ros-python学习样例笔记

    1.通信基本原理介绍 待写 2.三种通信方式的程序样例(python版) 2.1 topic 通信方式(非自定义和自定义) 2.1.1 创建工作空间和topic功能包 在ubuntu中打开命令行,输入 ...

  3. Binder机制及底层实现

    <1>进程间的内存空间是进程私有的<2>进程间和内核的空间是互通的<3>进程1空间<--->内核空间<-->进程2空间Binder跨进程通信 ...

  4. 添加索引后SQL消耗量在执行计划中的变化

    不同索引的执行效率也是不一样的,下面比较三条SQL语句在正常查询与建立普通索引与位图索引后的CPU消耗量的变化,目的为了是加强对索引的理解与运用 实验步骤:1.创建有特点的大数据表.为了保证索引产生前 ...

  5. day01-Redis入门

    Redis入门 1.初始Redis 1.1认识NoSQL SQL(关系型数据库) NoSQL(非关系型数据库) 数据结构 结构化(Structured) 非结构化 数据关联 关联的(Relationa ...

  6. Arrays.asList() 示例

    1 package Test.others; 2 3 import java.util.Arrays; 4 import java.util.Collections; 5 import java.ut ...

  7. dotnet初探:用miniapi创建一个自己的url

    致谢 首先写在前面,非常感谢微软mvp桂素伟先生的技术分享,因为微软的文档大部分都如机器翻译般的生硬,让人难以读下去,正是他的无私分享为我的.net学习旅程提供了方向,非常感谢.如果大家对他比较感兴趣 ...

  8. 机器学习06-(支持向量机SVM、网格搜索、文本分词、词袋模型、词频、文本分类-主题识别)

    机器学习-06 机器学习-06 支持向量机(SVM) 支持向量机原理 网格搜索 情感分析 文本分词 词袋模型 词频(TF) 文档频率(DF) 逆文档频率(IDF) 词频-逆文档频率(TF-IDF) 文 ...

  9. 2020-12-09:TCP中,慢启动是什么?

    福哥答案2020-12-09: 简单回答:乘法增大. 中级回答:cwnd拥塞窗口.rwnd接收窗口.MSS最大报文段长度.ssthresh慢开始门限.使用慢开始算法后,每经过一个传输轮次(即往返时延R ...

  10. 2022-01-20: 矩形区域不超过 K 的最大数值和。 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 题目数据保证总会存在一

    2022-01-20: 矩形区域不超过 K 的最大数值和. 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和. 题目数据保证总会存在一 ...