vert.x学习心得笔记(一)

vert.x官方中文文档:https://vertxchina.github.io/vertx-translation-chinese/

官方英文文档:

一:背景介绍

        首先我们介绍vert.x ,它是一种事件驱动,且异步的基于JVM的Java框架。

        由于近年来,移动网络、社交网络和电商的兴起,使各大服务提供商的客户端请求数量激增,传统服务器架构已不堪重负,致使基 于事件和异步的解决方案备受追捧。而vert.x功能强大,依赖第三方库较少,有多种语言的版本,可以用在JavaKotlinScalaGroovy、Ruby等语言上,同时具有事件驱动、流式编程和非阻塞等的特点,依托于全异步Java服务器Netty,并扩展了很多其他特性,以其轻量、高性能、而受到关注。

二:相关概念

Verticle: Vert.x的执行单元叫verticle。即程序的入口,Java需要继承一个AbstractVerticle抽象类 

          eg:  public class UserVerticle extends io.vertx.reactivex.core.AbstractVerticle {}

       verticle分两种,一种是基于EventLoop的适合I/O密集型的,还有一种是适合CPU密集型的worker verticle。而verticle之间         相互通信只能通过Eventbus,可以支持point to point 的通信,也可以支持publish & subscribe通信方式

Event Loop: 即事件循环,是由Vert.x启动的事件处理线程,也是Vert.x项目对外开放的入口Vert.x由此接收请求事件。一个Vert.x有一个或多个事件循环线程组成,线程最大数量为主机有效的CPU核数。 所有业务逻辑其实都会跑在Netty里的EventLoop上,而EventLoop通过循环事件队列来执行所有的业务逻辑,这样可以把一些  I/O操作频繁的事件及时从CPU上剥离开来,最后通过注册一个回调Handler来处理所有的事件回调,在EventLoop线程里可以开辟一个线程池,所有的在EventLoop里的同步的方法会被这个线程池接管,处理完后会再返回给EventLoop线程。这样可以避免EventLoop线程被阻塞。

worker verticle:事件的业务处理线程,用于处理长任务阻塞任务.我们的业务逻辑其实都是基于verticle来实现的,然后Vert.x框架会将你的verticle绑定到相关的线程模型上,两个Vert.x节点则通过EventBus互相通信,而EventBus通过HazelCast来获取整个集群里的节点信息。注意这里每一个verticle其实都是一个线程(启动的时候指定实例数目参数即可)

Event Bus:即事件总线,是Vert.x事件模型中最核心的部分,所有的事件都经由事件总线进行分发,包括Vertical之间的通信事                       件。可以将每个小的verticle看成是一个微服务, 服务与服务之间可以通过EventBus互相调用

回调机制:就是,下一步的行为依赖上一步的返回结果,可以参考一下这个链接:

                 https://www.cnblogs.com/heshuchao/p/5376298.html,在vert.x中,利用回调机制,可能会涉及到Lamoda表达式,大家可以自己学习一下

RxJava:一个库,用来实现Reactive的Java

 

三 事件模型流程

在Vert.x中,Event Loop用于接收事件请求,并将短业务操作交由其内部的Vertical来处理,该模块是非阻塞的,这样可以保证请求的处理效率;阻塞任务通过Vert.x的事件机制脱离当前线程,转移到Worker Vertical中执行,并执行结果返回给Event Loop Vertical。 这一过程完成的核心是Event Bus,Event Bus中注册了所有的事件,通过事件匹配完成事件转移和结果返回,从而将整个流程衔接起来。

下面以一个HTTP请求的处理过程详述Vert.x的事件处理流程。

Vert.x启动时,会将Worker Vertical的事件处理函数加载到Event Bus,当一个HTTP请求发送到Vert.x构建的应用时,Event Loop首先接收到请求,并对请求做分析、包装,然后将事件交给Event Bus来处理,Event Bus为此次请求事件添加一个事件ID,然后根据注册的Worker Vertical事件寻找已经注册的监听函数,若未找到则会抛弃该事件,若找到则会对处理类进行实例化,并同时使用事件ID在Event Bus中注册一个返回结果处理事件,该事件为Event Vertical类型。下一步由Worker Vertical实例执行事件处理函数,事件处理函数中通常包含业务处理、数据库操作等。Worker Vertical实例处理结束后,将返回结果和事件信息返回给Event Bus,Event Bus找到在其中注册的Event Vertical实例,然后将返回数据交给该实例处理,Event Vertical实例进一步处理数据并将结果返回给浏览器。

 

3.1 数据传递

     在使用Java对象的时候,Vert.x使用JSON来实现数据传递

参考文献:1 https://blog.csdn.net/chen3749102/article/details/51754861  作者:itnannan  来自:CSDN

                  2 百度百科

 

 

       

 

你可能感兴趣的:(vert.x学习心得笔记(一))