响应式编程:Vert.x官网学习

响应,编程,vert,学习 · 浏览次数 : 59

小编点评

**Vert.x 简介** Vert.x 是一个基于 JVM 的轻量级、高性能响应式工具包,适用于最新的服务端后台、互联网、企业应用架构。 **特点:** - 资源效率:可以用更少的资源处理更多的请求。 - 可扩展性:可以随着工作负载的增长而扩展。 - 异步编程:可以使用异步 I/O 时,使用更少的线程处理更多并发连接。 - 可组合性:可以组合多个模块来构建应用程序。 - 可嵌入性:可以嵌入到其他应用程序中。 **主要功能:** - TCP、HTTP、文件系统、事件总线等基础功能。 - Web 开发支持。 -数据库访问支持。 - 消息传输支持。 - 微服务发现支持。 **应用场景:** - 服务端后台。 - 网络应用程序。 - 企业应用。 - 多语言应用程序。

正文

本文基于 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 上,更体现在由其开发出的程序的高性能和扩展性上。

Microservices

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 操作完成会被阻塞,有些线程准备处理 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官网学习相似的内容:

响应式编程:Vert.x官网学习

本文基于 Vert.x 官网 https://vertx.io/ 内容,带领大家学习响应式编程里比较有名的工具包 Vert.x 。文章内容取自官网由博主简化总结,希望帮助大家理解响应式编程。 - Vert.x 简介 - Vert.x 特性 - 响应式模式概述 > 推荐博主开源的 H5 商城项目**w

看看Angular有啥新玩法!手把手教你在Angular15中集成Excel报表插件

> 摘要:本文由葡萄城技术团队于博客园原创并首发。葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 # Angular15新特性 Angular框架(以下简称“Angular”)作为一款由谷歌开发的Web应用程序框架,其强大的依赖注入系统、可重复使用的模块化开发理念和响应式编程模式等特

深度长文解析SpringWebFlux响应式框架15个核心组件源码

以上是Spring WebFlux 框架核心组件的全部介绍了,希望可以帮助你全面深入的理解 WebFlux的原理,关注【威哥爱编程】,主页里可查看V哥每天更新的原创技术内容,让我们一起成长。

初识VUE响应式原理

自从Vue发布以来,就受到了广大开发人员的青睐,提到Vue,我们首先想到的就是Vue的响应式系统,那响应式系统到底是怎么回事呢?接下来小编就给大家简单介绍一下Vue中的响应式原理。

vue3编译优化之“静态提升”

前言 在上一篇 vue3早已具备抛弃虚拟DOM的能力了文章中讲了对于动态节点,vue做的优化是将这些动态节点收集起来,然后当响应式变量修改后进行靶向更新。那么vue对静态节点有没有做什么优化呢?答案是:当然有,对于静态节点会进行“静态提升”。这篇文章我们来看看vue是如何进行静态提升的。 什么是静态

nomp矿池源码详解

是一个由Node.js编写的高效、可扩展的加密货币挖矿池,它基于node-stratum-pool模块,包含奖励处理与支付功能以及一个响应式前端网站,提供实时统计和管理中心,本文对该项目的主体架构及相关源码进行了介绍!

全网首一份!你最需要的PPTP MS-CHAP V2 挑战响应编程模拟计算教程!代码基于RFC2759,附全部源码!

本文基于网络密码课上的实验 本来想水一水就过去,代码就网上找找,不行就GPT写,但是!一份都找不到,找到的代码都是跑不了的,总会是就是乱七八糟。所以准备认真的写一份。 代码编译成功的前提是要预先装好openssl库! 本随笔主要有三个内容: 编写程序,模拟计算NTResponse、Authentic

CodeArts Snap:辅助你编程的神器

摘要:通过将自然语言转化为规范可阅读、无开源漏洞的安全编程语言,提升开发者编程效率,助力企业快速响应市场需求。 本文分享自华为云社区《华为云发布智能编程助手 CodeArts Snap!》,作者:DevAI 。 基于大模型的程序自动生成取得重大突破 数字时代竞争激烈,应用研发效率提升在企业竞争力构建

如何使用 Node.js Stream API 减少服务器端内存消耗?

摘要:让我们看一个示例,展示在内存消耗方面,采用流的编程思路带来的巨大优越性。 本文分享自华为云社区《使用 Node.js Stream API 减少服务器端内存消耗的一个具体例子》,作者:Jerry Wang 。 HTTP 响应对象(上面代码中的 res)也是一个可写流。这意味着如果我们有一个表示

[转帖]解决jmeter请求响应结果乱码的问题

如下图所示,请求百度接口的时候,发现返回的信息里面中文是乱码 这个时候我们只需要改一下jmeter里的配置文件,设置响应结果的字符编码为UTF-8就行了。 进入jmeter安装目录/bin中,找到jmeter.properties这个文件,windows用文本编辑器打开,我是mac的,直接vim编辑