Vert.x Java开发指南——第一章 介绍

Java Vertx 全解析 Vertx Java 异步编程套件 阅读详情

第一章 介绍

版权声明:本文为博主自主翻译,转载请标明出处。 https://blog.youkuaiyun.com/elinespace/article/details/80373294

该指南是Vert.x异步编程的一个入门介绍,主要针对那些熟悉主流、非异步Web开发框架和库(如Java EE、Spring)的开发者。

1.1 关于该手册

我们假定读者已经熟悉Java编程语言及其生态系统。

我们将以一个Wiki Web应用作为开始,它开始采用关系数据库和服务端页面渲染;然后我们通过几个步骤逐步演进该应用,直到它成为一个现代的单页应用,并且拥有实时Web的特征【注意,术语“实时”在Web技术环境中的广泛使用不应与专业操作系统中的硬或软实时混淆】。在这个过程中,你将学会:

  1. 设计一个Web应用,它通过模板进行服务端页面渲染,并且使用关系型数据库持久化数据。
  2. 清晰的隔离每个技术组件,使之成为一个可复用的事件处理单元,称为verticle。
  3. 为了方便Verticle设计,而抽取Vert.x服务。Verticle可以在同一个JVM进程中或集群中的分布式节点之间无缝通讯。
  4. 测试异步操作代码。
  5. 与公开HTTP/JSON Web API的第三方服务集成。
  6. 公开HTTP/JSON Web API。
  7. 采用HTTPS的安全和访问控制,针对Web浏览器会话的用户认证以及针对第三方客户端应用的JWT Token。
  8. 通过流行的RxJava库及其相关的Vert.x集成,采用响应式编程重构部分代码。
  9. 采用AngularJS的单页应用的客户端编程。
  10. 基于SockJS,使用统一Vert.x事件总线集成的实时Web编程。

该文档和示例代码的源文件位于https://github.com/vert-x3/vertx-guide-for-java-devs。我们欢迎问题报告、反馈和Pull Request。

1.2 什么是Vert.x

Eclipse Vert.x是一个基于JVM构建响应式应用的工具包。
——Vert.x网站

Eclipse Vert.x(接下来的文档中我们仅称为Vert.x)是Eclipse基金会下的一个开源项目。Vert.x于2012年由Tim Fox发起。

Vert.x不是一个框架,而是一个工具包:它的核心库定义了编写异步网络应用的基本API,你可以为应用程序选择有用的模块(如数据库链接、监控、认证、日志、服务发现、集群支持等)。Vert.x基于Netty项目——一个基于JVM的高性能异步网络库。如果需要,Vert.x允许你访问Netty内部,但是通常情况下你会受益于Vert.x提供的高级API,而且与原始Netty相比并不牺牲性能。

Vert.x不强制要求打包方式或者构建环境。由于Vert.x Core本身只是一个普通的JAR库,所以它可以嵌入到应用程序内部,无论这些应用是打包为一组JAR、一个包含所有依赖的单独的JAR、或者即使被部署到流行的组件和应用容器。

由于Vert.x设计用于异步通信,因此它可以处理更多的并发网络连接,且比诸如Java Servlet或者java.net.socket类等同步API使用更少的线程。Vert.x可以用于广泛的应用程序:大容量消息/事件处理、微服务、API网关、移动应用HTTP API,等。Vert.x及其生态提供了构建端到端响应式应用的各种技术工具。

尽管可能听起来Vert.x只适用于要求苛刻的应用,本指南同样说明Vert.x对于更多传统的Web应用也工作良好。正如我们将看到的,代码将保持相对容易理解,但是,如果应用程序需要面对流量的突然峰值,那么代码已经使用可扩展的基本组件编写:事件的异步处理。

最后,值得一提的是,Vert.x是多语言的,它支持广泛的流行的JVM语言:Java、Groovy、Scala、Kotlin、JavaScript、Ruby及Ceylon。当Vert.x支持一种语言时,它的目标并不只是提供访问API,还要确保在每种目标语言中,特定语言的API是符合语言习惯的(如,使用Scala future替换Vert.x future)。使用不同的JVM语言开发Vert.x应用程序的不同技术部分是非常有可能的。

1.3 Vert.x核心概念

在Vert.x中有两个关键的概念需要学习:

  1. 什么是Verticle
  2. 事件总线如何让Verticle之间通讯

1.3.1 线程和编程模型

许多网络库和框架依靠一个简单的线程策略:每个网络客户端在链接时被分配一个线程,这个线程处理这个客户端的请求,直到链接断开。这是Servlet以及使用java.io和java.net包编写网络代码的情况。虽然这种“同步I/O”线程模型具有简单易懂的优点,但是当存在太多并发链接时,它会损害可伸缩性,因为系统线程并非廉价,并且在高负载的情况下,操作系统内核在线程调度管理上花费显著的时间。在这种情况下,我们需要转移到“异步I/O”,Vert.x则为“异步I/O”提供了坚实的基础。

Vert.x中的部署单元称为Verticle。一个Verticle通过一个事件循环(EventLoop)处理接收到的事件,这些事件可以是任何事情,如接收网络缓冲、调度事件或由其它Verticle发送的消息。事件循环(EventLoop)是异步编程模型中是特有的:
这里写图片描述
每个事件应在合理的时间内进行处理,以免阻塞事件循环(EventLoop)。这意味着当在事件循环(EventLoop)中执行时,不能进行线程阻塞操作,类似在一个GUI中处理事件(如通过执行一个缓慢的网络请求可以冻结Java/Swing界面)。如我们在本指南接下来看到的,Vert.x在事件循环(EventLoop)的外部提供了处理阻塞操作的机制。在任何情况下,事件循环(EventLoop)执行事件的时间过长时,Vert.x会在日志中输出警告,这是可配置的,以满足特定应用需求(如当工作于较慢的IoT ARM板时)。

每个事件循环(EventLoop)连接到一个线程。默认情况下,Vert.x为每个CPU内核线程赋予2个事件循环(EventLoop)。这直接导致了常规的Verticle总是在同一个线程中处理事件,因此不需要使用线程协调机制来操作Verticle状态(如Java类属性)。

Verticle可以被传递一些配置信息(如证书、网络地址等),而且Verticle可以被多次部署:
这里写图片描述
到达的网络数据从接收线程中接收,然后作为事件被传递给相应的Verticle。当一个Verticle打开了网络服务器并且被部署了多次时,那么事件会按照轮询的方式分发到Verticle实例,这对于在大量并发网络请求时最大化CPU使用率是非常有用的。最后,Verticle拥有一个简单的启动/停止生命周期,Verticle可以部署其它Verticle。

1.3.2 事件总线

在Vert.x中,Verticle构成了代码部署的技术单元。Vert.x事件总线是在不同Verticle之间通过异步消息传递进行通讯的主要工具。例如,假设我们有一个Verticle用于处理HTTP请求,一个Verticle用于管理数据库访问。事件总线允许HTTP Verticle发送一个请求到数据库Verticle,执行一个SQL查询,并响应HTTP Verticle:
这里写图片描述
事件总线允许传递任何类型的数据,然而JSON是首选的交换格式,因为它允许不同语言编写的Verticle之间进行通讯,并且更一般地,JSON是一种流行的通用半结构化数据封送处理文本格式。

消息可以发送到任意自由字符串组成的目的地。事件总线支持以下通讯方式:

  1. 端到端的消息
  2. 请求——响应消息
  3. 发布/订阅用于广播消息

事件总线允许Verticle之间透明的通讯,不只是在同一个JVM进程中:

  • 当网络集群启动时,事件总线是分布式的,因此消息可以被发送到运行于其它应用节点的Verticle。
  • 事件总线可以通过一个简单的TCP协议访问,以便第三方应用进行通讯。
  • 事件总线还可以通过通用消息桥公开(如AMQP、Stomp)。
  • SockJS桥接允许Web应用通过运行在浏览器中的JavaScript与事件总线无缝通讯,与任何Verticle一样接收与发布消息。
vert.x入门 Vert.x是一个事件驱动、非阻塞的异步编程框架,随着互联网应用越来越追求响应速度和高并发处理能力,异步编程将成为未来编程的主流。vert.x由于支持多种语言,性能良好,在国外受到很好的开发者支持。本教程将对vert.x进行由浅入深的讲解,一方面作为我自己工作学习的心得记录,另一方面供同样和我一样工作和学习用到vert.x的同学进行参考,有不足和错误之处,敬请指正,谢谢。 vertx的特 阅读详情

相关推荐

vert-x:使用Java语言中的vert-x框架的基本功能进行项目

垂直 使用Java语言中的vert-x框架的基本功能进行项目设计。 在3.1.0版中使用vert-x Java 8 Maven的3 春天4 蒙哥3 #运行项目要运行项目,必须在计算机上配置maven依赖管理器和版本8中的Java。 输入项目的vertx目录并执行命令: mvn清洁包装 完成上述命令后,执行以下命令: java -jar目标/ vex-1.0-SNAPSHOT-fat.jar 消息后: 信息:成功部署垂直 访问URL: 并浏览应用程序 #CNAB集成可以从软件包的根目录获得有关CNAB400集成的类: com.daniel.vertx.cnab 为了测试Vert-x文件写入功能和其余处理,开发了CNAB400协议附带的文件写入功能(随附的文档)。 作为示例,仅开发了文件头的编写,但是有了它,就已经可以看到框架的行为了。 根据休假后的要求撰写作品。

这是目前最快的 Java 框架,300个框架中排名第一,真香

如果您搜索“ 最佳网络框架 ”,您可能会偶然发现Techempower基准测试,其中排名超过300个框架,在那里你可能已经注意到Vert.x是排名最高的。 Vert.x是一个多语言 Web 框架,它支持 Java ,Kotlin,Scala,Ruby和Javascript支持的语言之间的共同功能。 无论语言如何,Vert.x都在Java虚拟机(JVM)上运行。 模块化和轻量级,它面向微服务开发。 ...

weixin_46302190的博客 627

玩转Matlab-Simscape(初级)-01-从一个简单模型开始学习之旅

本文从初学者的角度分享的关于Matlab simscape 的基础内容,简单分享了Simscape搭建模型,创建子系统,修改定义参数等内容,为将来深入学习和使用simscape做铺垫。

万金油笑匠的博客 6517

一文带你认识目前最快的Java框架:Vert.x

在使用vertx-web的一些测试中,性能有所下降,但由于它似乎源于优化,因此可能会在后续版本中得到解决。在使用并发时,我们可以从如今的许多选项中获取,例如Promise,Future,Rx,以及Vert.x自己的惯用方法。凭借更强的并发支持,Vert.x不仅适用于IO,也适用于需要并行计算的CPU繁重流程。Vert.x是一个多语言Web框架,它支持Java,Kotlin,Scala,Ruby和Javascript支持的语言之间的共同功能。由于它是跨处理程序的简化,我们可以专注于重要的事情,如数据库查询。

qq_66627105的博客 1568

基于STM32开发的智能语音控制系统

本文将介绍如何使用STM32微控制器开发一个智能语音控制系统,通过语音识别模块、OLED显示屏、Wi-Fi模块等实现对家用电器或其他设备的语音控制。智能语音控制系统的核心是STM32微控制器,通过语音识别模块识别用户的语音指令,并根据指令控制家用电器或其他设备。:定期测试语音识别模块、继电器控制模块、OLED显示屏和Wi-Fi模块的工作状态,确保系统能够在各种情况下正常运行,并保持智能语音控制系统的可靠性。本系统同样适用于办公环境,可以通过语音指令控制办公室设备,如照明、空调等,提供智能化的办公体验。

stm32d1219的博客 6911

ROS2_IGH方案配置(二)——Ubuntu22.04 实时内核性能验证与调优

本文详细介绍了在Ubuntu22.04系统上配置ROS2_IGH方案时,如何验证和调优PREEMPT_RT实时内核性能。通过使用cyclictest工具进行基准测试和压力测试,分析中断与硬件延迟,并优化内核参数,确保系统满足工业控制领域对硬实时性的苛刻要求。文章还提供了针对ROS2的特殊优化建议和性能监控方案,帮助开发者实现毫秒级延迟的稳定控制。

weixin_30791095的博客 224

【Java】初学Vert.x(1)

今天开始将分享自己初学Vert.x的一些经验和看法。里面有不足或想得不周到的地方,还请各位看官多多包涵。

Kida 的躺平小屋 1342

SolidWorks的GB库(钢型材库,包括铝型材、铝管等结构)安装及使用教程(生成铝型材为例)

1、GB库的下载 2、GB库的安装教程 3、GB库的使用教程

树下等苹果的博客 12万+

Vert.x(vertx) 简明介绍

摘要 Vert.x最大的特点就在于异步(底层基于Netty),通过事件循环(EventLoop)来调起存储在异步任务队列(CallBackQueue)中的任务,大大降低了传统阻塞模型中线程对于操作系统的开销。因此相比较传统的阻塞模型,异步模型能够很大层度的提高系统的并发量。 Vert.x除了异步之外,还提供了非常多的吸引人的技术,比如EventBus,通过EventBus可以非常简单的实现分布...

happyfly的博客 7万+

Simulink+Simscape多体仿真:六自由度Stewart平台动力学建模全流程

本文详细介绍了使用Simulink和Simscape Multibody进行六自由度Stewart平台动力学建模的全流程,涵盖从CAD模型导入、运动学逆解计算到实时控制系统的设计。通过MATLAB/Simulink与Simscape的协同工作,实现高保真度的并联机器人仿真,适用于飞行模拟器、精密加工等高精度领域。

r2s3t4的博客 486

ZYNQ Petalinux编译系统启动文件实战指南

本文提出的混合编译加速方案实测可将编译时间从45分钟缩短至18分钟,QSPI双启动方案已在工业控制领域成功应用。Xilinx官方UG1144文档(最新v2023.1版)正点原子《ZYNQ嵌入式开发实战》开源项目Meta-Petalinux(GitHub趋势项目)未来展望:随着Versal平台的普及,Petalinux将支持更多AI加速器原生驱动,值得持续关注。

QQ_778132974的博客 811

Vert.x 指南 for Java 开发者

Vert.x 是一个用于构建响应式应用程序的工具包,它基于事件驱动和非阻塞模型,适用于高并发的应用场景。Vert.x 提供了一种轻量级、高性能的解决方案,特别适合在 Java 虚拟机(JVM)上运行的现代、并发和分布式应用程序。 ## 项目快速启动 ### 环境准备 - Java 8 或更高版本 - Maven 或 Gradle ### 创建项目 1. 使用 Maven 创建一个新的项目

gitblog_00806的博客 1026

Vue2 - 详细实现安装西瓜视频 xgplayer 插件详细配置及使用教程,利用西瓜视频播放器播放 mp4、flv、hls 格式视频文件及视频推流(直播或监控摄像头画面),支持移动端H5及PC网站!

vue2,nuxt2,西瓜视频,xgplayer,插件组件,xgplayer-hls,xgplayer-flv,xgplayer-mp4,播放视频点播和直播视频流,自定义播放器样式,截屏,监控视频,vue使用西瓜播放器播放flv、hls、mp4视频,截屏按钮,直播流,报错,黑屏,加载失败,苹果ios不兼容,重连,怎么改样式,很卡,详细教程,监控实时播放推流,倍速播放,在线flv在线推流地址,HLS播放,vue西瓜播放器,vue如何使用西瓜视频插件做直播推流回流,视频点播,flv在线视频流播放,截图功能,利用

🏆 前端领域优质创作者 1万+

Vert.x 响应式 Web 框架介绍使用

一、Vert.x Vert.x 是JVM上构建 响应式 应用的工具。 响应式应用既可以随着工作负载的增长而 扩展 ,又可以在出现故障时 弹性回复 。 响应式应用是 即时响应 的,因为它能有效利用系统资源并保护自身免受错误影响,从而使延迟可控。Vert.x 背靠庞大的响应式模块生态系统,具有编写现代服务所需的一切:全面的Web技术栈,响应式数据库驱动程序、消息队列、事件流、集群支持、指标监控、分布式跟踪等等。 Vert.x最大的特点就在于异步(底层基于Netty),通过事件循环(EventLoop)来调起存储

小毕超博客 6575

20、七鳃鳗繁殖与早期生活史:从水质到养殖的全面解析

本文全面解析了七鳃鳗的繁殖与早期生活史,重点探讨了水质对幼体生存的影响、养殖密度与生长关系、变态过程的时间与大小特征,以及人工繁殖在濒危物种恢复和入侵物种控制中的应用。同时,文章分析了大规模养殖面临的挖掘基质需求、空间限制、清洁管理、疾病防控及微生物环境等挑战,并强调实验室养殖对科学研究和种群管理的重要意义。随着技术进步,未来有望扩展更多物种的繁殖研究,揭示七鳃鳗生物学的进化奥秘,实现资源的可持续利用。

l6m7n8的博客 116

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Vert.x Java开发指南——第四章 重构为Vert.x服务

第四章 重构为Vert.x服务 与我们最早的实现相比,前面的重构已经是向前一大步,因为我们提取出了独立且可配置的Verticle,并且在事件总线之上使用异步消息进行链接。我们还看到,我们可以同时部署一个指定Verticle的几个实例,以便更好地处理负载以及更好地利用CPU内核。 在这一节,我们将看到如何设计和使用Vert.x服务。服务的主要优势是,它定义了一个接口用于执行Verticle公开的...

边城白衣的博客 3388

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Vert.x Java开发指南——第二章 使用Vert.x编写最小可用Wiki

第二章 使用Vert.x编写的最小可用Wiki 相应的源代码位于该指南代码库的step-1目录下 我们将从第一次迭代开始,最简单的代码可能是使用Vert.x编写一个Wiki。而下一次迭代将在代码库中引入更多的简洁以及适当的测试,我们将看到基于Vert.x的快速原型是一个既简单又现实的目标。 现阶段,Wiki将使用HTML页面的服务端渲染以及通过JDBC链接进行数据持久化。为了完成这些...

边城白衣的博客 8143

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Vert.x Java开发指南——第八章 安全和访问控制

第八章 安全和访问控制 相应代码位于本指南仓库的step-7目录下 使用Vert.x,安全和访问控制非常容易实现。在本章中,我们将介绍: 迁移HTTP到HTTPS 添加用户认证以及基于分组的权限到Web应用中 使用JWT对Web API进行访问控制 8.1 在Vert.x中支持HTTPS Vert.x为SSL加密网络链接提供了支持。在生产环境中暴露HTTP服务器比较常见的方式...

边城白衣的博客 3089

第一章: Vert.x 异步编程的基础知识

本书这部分的章节将通过使用Vert.x工具包教你异步编程的基本概念。使用Vert.x思考异步操作绝对是可行的(而且很有趣!),我们将探讨Vert.x应用程序的主要构建块。

白石的专栏 4347

Vert x开发指南

Vert x开发指南

jhfyuf的博客 450

Vert.x介绍

Vert.x系列: Vert.x介绍:https://blog.csdn.net/haoranhaoshi/article/details/89279096 Vert.x实战一:Vert.x通过Http发布数据:https://blog.csdn.net/haoranhaoshi/article/details/89284847 Vert.x实战二:TCP通信:https://blog.csdn....

haoranhaoshi的博客 1005

Vert.x Java开发指南——第五章 测试Vert.x代码

第五章 测试Vert.x代码 相应代码位于本指南仓库的step-4目录。 到目前为止,我们已经开发了未包含测试的Wiki实现。这自然不是一种好的实践,因此让我们看一下如何为Vert.x代码编写测试。 5.1 开始 vertx-unit模块提供了工具来测试Vert.x中的异步操作。除此之外,你还可以使用你选择的测试框架,如JUnit。 使用JUnit,需要的Maven依赖如下:...

边城白衣的博客 2356

Vert.x Codegen 使用指南

Vert.x Codegen 使用指南 项目介绍 Vert.x Codegen 是一个用于异步多语言 API 的代码生成器,它为 Vert.x 生态系统提供强大的支持。这个工具通过注解处理器和类模型JSON转换器,使得数据对象能够便捷地处理,并且包含了对Protobuf的支持,大大简化了高效开发复杂服务的过程。它是构建响应式、高性能应用程序的关键组件之一,特别是在微服务架构中。 项目快速启动 要...

gitblog_00675的博客 1043

vert.x笔记:1.vert.x介绍

原文及更多文章请见个人博客:http://heartlifes.com 直接转载csdn上的文章:http://www.csdn.net/article/2015-05-20/2824733-JavaVert.x简介在Java20周年之际,Java用户对Java的抱怨与日俱增,比如内存管理、笨重的JavaEE等。而Java依然在TIOBE编程语言排行榜上艰难的维持第一名的位置,随着一些新编程语言的

heartlifes 1136
上一篇: G1垃圾回收器起步
下一篇: Vert.x Java开发指南——第二章 使用Vert.x编写最小可用Wiki
边城白衣
博客等级 码龄14年 106粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值