初识Vert.x(一)

摘要

  近年来,移动网络、社交网络和电商的兴起,使各大服务提供商的客户端请求数量激增,传统服务器架构已不堪重负,致使基于事件和异步的解决方案备受追捧,如Nginx、NodeJS。Vert.x框架基于事件和异步,依托于全异步Java服务器Netty,并扩展了很多其他特性,以其轻量、高性能、支持多语言开发而备受开发者青睐(百度百科)。

 

本篇主要从以下方面简单介绍一下Vert.x

1、Vert.x是什么

2、Vert.x有什么用

3、Vert.x的优点

4、Vert.x的技术体系

 

1、Vert.x是什么

  Vert.x借鉴了Erlang和Akka架构设计,充分利用了多核处理性能实现高并发需求的一种框架。Vert.x最大的特点就是异步(基于Netty异步通信),通过事件循环(EventLoop)调用存储在异步队列(CallBackQueue)中的任务,从而降低传统模式中线程对操作系统的阻塞开销,并且能够很大程度上提高系统的并发量。

  但也由于Vert.x的异步带来编码上的复杂性,如果想通过Vert.x编写优美的代码,则需要一定功底才行,并且需要熟悉Lamdda表达式、函数式编程、Reactive等技术。

  Vert.x运行在JVM上,并且支持多种编程语言,同一个应用,你可以选择多种编程语言同时开发。在Vert.x 2版本,也就是基于JDK7,还没有Lambda的时候,基本使用JavaScript作为开发语言相对较多;但到Vert.x3的时代,JDK8的出现,使Java已经作为Vert.x主流的开发语言,而Vert.x也被更多的开发者所接受。

 

2、Vert.x有什么用

(1)web开发。Vert.x封装了Web开发常用的组件,支持路由、Session管理、模板等,可以非常方便的进行Web开发。并且不需要容器。

(2)TCP/UDP开发。Vert.x提供了丰富的IO类库,支持多种网络应用开发(如HTTP、MQTT)。不需要处理底层细节(如拆包和粘包),注重业务代码编写。

(3)Event Bus(事件总线)。Event Bus是Vert.x的核心神经系统,通过Event Bus可以实现分布式消息,远程方法调用等等。因为Event Bus的存在,Vert.x可以非常便捷的开发微服务应用。

(4)支持主流数据库和消息访问。Vert.x支持MongoDB、MySQL、Redis、kafka等。

(5)分布式锁、分布式计数器、分布式Map等。

 

3、Vert.x的优点

(1)异步非阻塞(异步无锁编程)

Vert.x就像是跑在JVM之上的Nodejs,所以Vert.x的第一个优势就是这是一个异步非阻塞框架。上面也提到了异步,我们使用ajax来演示的异步,下面使用Vert.x请求远程地址一个代码,可以看到和ajax非常像!

 1 System.out.println("1")
 2  
 3 WebClient
 4     .create(vertx)
 5     .postAbs(REQUEST_URL) // 这里指定的是请求的地址
 6     .sendBuffer(buffer, res -> { // buffer是请求的数据
 7  
 8         if (res.succeeded()) {  
 9             // 请求远程服务成功
10             System.out.println("2")
11             
12         } else {
13             // 请求失败
14             resultHandler.handle(Future.failedFuture("请求服务器失败..."));
15         }
16     });
17  
18 System.out.println("3")

 

Vert.x必须运行在JDK8上,因为JDK8提供了lambda表达式,可以简化匿名内部类的编写,可以极大的挺高代码的可读性。

 

(2)支持多种编程语言

 

(3)完整的生态环境

Vert.x和Spring的对比,有一种使用MacOS和Windows对比的感觉。Vert.x和庞大的Spring家族体系不同,Vert.x提供数据库操作,Redis操作,Web客户端操作,NoSQL数据库的一些操作等常用的结构;虽然简单,但足够使用。

 

(4)为微服务而开发

Vert .x提供了各种组件来构建基于微服务的应用程序。通过EventBus可以非常容易的进行服务之间的交互。并且提供了HAZELCAST来实现分布式。

 

(5)丰富的IO支持模块化

 

4、Vert.x的技术体系

(1)核心模块

Vert.x核心模块包含一些基础的功能,如HTTP,TCP,文件系统访问,EventBus、WebSocket、延时与重复执行、缓存等其他基础的功能,你可以在你自己的应用程序中直接使用。可以通过vertx-core模块引用即可。

 

(2)web模块

Vert.x Web是一个工具集,虽然核心模块提供了HTTP的支持,但是要开发复杂的Web应用,还需要路由、Session、请求数据读取、Rest支持等等还需要Web模块,这里提供了上述的这些功能的API,便于开发。

Vert.x是一个异步框架,而请求HTTP服务是一个耗时操作,在Vert.x中所有的耗时,都会阻塞EventBus,导致整体性能被拖垮,因此,对于请求Web服务,一定要使用Vert.x提供的vertx-web-client模块。

 

(3)数据访问模块

Vert.x提供了对关系型数据库、NoSQL、消息中间件的支持,传统的客户端因为是阻塞的,会严重影响系统的性能,因此Vert.x提供了对以上客户端的异步支持。

具体支持的数据访问如下:MongoDB client,JDBC client,SQL common,Redis client,MySQL/PostgreSQLclient

 

(4)Reactive响应式编程

 

(5)整合其他模块

邮件客户端、STOMP客户端与服务端、Consul Clien、RabbitMQ Client 、Kafka Client、消息队里的客户端支持、JCA适配器。

 

(6)认证与授权

 

(7)微服务

Vert.x提供多个组件构建基于微服务的应用程序。

如:微服务发现(Vert.x Server Discovery)、断路器(Vert.x Circuit Breaker)、配置中心(Vert.x Config)

 

参考文献:

https://blog.csdn.net/king_kgh/article/details/80772657

Vert.x官网:https://vertx.io/docs/#integration

https://github.com/vert-x3/vertx-awesome

 

因为刚好有需求需要用到Vert.x,找遍了所有网站,发现记录Vert.x的少之有少,因此记录下这次学习。

由于也是初学若有哪里不对的地方还请见谅,并希望能指出,非常感谢。

posted @ 2020-10-18 16:35  爱学的D  阅读(789)  评论(0)    收藏  举报