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

这篇具有很好参考价值的文章主要介绍了响应式编程: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 的核心,我们支持 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】每周分享技术干货、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力!文章来源地址https://www.toymoban.com/news/detail-545340.html

到了这里,关于响应式编程:Vert.x官网学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实现一个 SEO 友好的响应式多语言官网 (Vite-SSG + Vuetify3) 我的踩坑之旅

    在 2023 年的年底,我终于有时间下定决心把我的 UtilMeta 项目官网 进行翻新,主要的原因是之前的官网是用 Vue2 实现的一个 SPA 应用,对搜索引擎 SEO 很不友好,这对于介绍项目的官网来说是一个硬伤 所以在调研一圈后,我准备用 Vite-SSG + Vue3 + Vuetify3 把官网重新来过,前后花

    2024年03月11日
    浏览(51)
  • 【论文阅读】xNIDS:可解释的基于深度学习的网络入侵检测系统的主动入侵响应(USENIX-2023)

      基于深度学习的网络入侵检测系统(DL-NIDS)得到了显著的探索,并显示出卓越的性能,但存在两个问题: 检测结果和可操作的解释之间存在语义差距,不足以对检测到的入侵作出积极的回应 高错误成本使网络运营商不愿意仅仅根据检测结果做出反应(即高误报带来的警

    2024年02月05日
    浏览(54)
  • 含源码|基于MATLAB的去雾系统(5种去雾算法+1种本文的改进算法)

    去雾系统V2包括作者新加入的 多尺度Retinex去雾算法以及改进去雾算法 ,以及 4种 评价去雾效果的 客观指标 。 引言 去雾系统新增功能 结果分析 源码获取 展望 参考文献 在作者前面写过的文章中,已经介绍过图像去雾算法的应用价值及研究现状,并且也介绍了4种去雾算法的

    2024年01月23日
    浏览(79)
  • [WinError 10038] 在一个非套接字上尝试了一个操作,这是许多编程人员经常遇到的错误之一。本文将解释什么是套接字,为什么会出现 WinError 1...

    [WinError 10038] 在一个非套接字上尝试了一个操作,这是许多编程人员经常遇到的错误之一。本文将解释什么是套接字,为什么会出现 WinError 10038 错误以及如何解决该错误。 在计算机网络编程中,套接字是一个端点,用于发送和接收网络数据。它可以是客户端或服务器端,并与

    2024年02月16日
    浏览(59)
  • 响应式编程初探

    具有以下特质:即时响应性(Responsive)、回弹性(Resilient)、弹性(Elastic)以及消息驱动(Message Driven)响应式系统更加灵活,松耦合,可伸缩 即时响应性 只要有可能, 系统就会及时地做出响应。 即时响应是可用性和实用性的基石, 而更加重要的是,即时响应意味着可以

    2023年04月16日
    浏览(27)
  • 基于IAP的嵌入式系统在线编程设计(学习)

    摘要:为了实现嵌入式系统程序的在线升级,提出一种基于IAP在线编程的程序更新方法。 以STM32L431控制器为例,该方法对控制器的片内FLASH进行区域划分,分别存放引导程序、执行程序及待更新程序。 系统通过运行引导程序将待更新程序更新到执行程序的FLASH区域,程序更新

    2024年02月15日
    浏览(52)
  • “中国法研杯”司法人工智能挑战赛:基于UTC的多标签/层次分类小样本文本应用,Macro F1提升13%+

    相关文章推荐: 本项目主要完成基于UTC的多标签应用,更多部署细节请参考推荐文章。本项目提供了小样本场景下文本多标签分类的解决方案,在 UTC的基础上利用提示学习取得比微调更好的分类效果,充分利用标注信息。 项目背景: 近年来,大量包含了案件事实及其适用法

    2024年02月05日
    浏览(53)
  • Vert.x 源码解析(4.x)——Local EvnentBus入门使用和源码解析

    Vert.x 源码解析(4.x)——Local EvnentBus入门使用和源码解析 Vert.x EventBus是一个分布式事件总线,用于在Vert.x应用程序内或跨多个Vert.x应用程序之间实现异步通信。它允许不同的组件、模块或服务之间通过消息进行交互,从而实现松耦合和高度可扩展的架构。 EventBus分为两种,一种

    2024年02月09日
    浏览(28)
  • Vue3实现响应式编程

    Vue 3的响应式编程实现主要是基于Proxy和Object.defineProperty。以下是对Vue 3的响应式编程实现的简单说明和代码示例。 在Vue 3中,响应式数据是通过使用JavaScript的Proxy对象实现的。Proxy对象可以用来定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。 Vue 3使用

    2024年01月22日
    浏览(46)
  • 基于Django的计算机编程技术学习与服务平台

    临近毕业,又到了赶毕设的时候了,本次介绍分享一下自己的毕业设计项目吧。 项目主题:基于Django的计算机技术编程技术学习与服务平台 实现功能: 1.登入:用户的登陆注册 2.Python教程:实现用户的Python技术文章的浏览收藏转发以及评论的功能 3.IT散文:实现用户对散文博

    2024年01月22日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包