{ vert.x } Vert.x初接触

最近有点时间,关注了下Vert.x,从测试数据来看,性能不错,适合目前移动互联网的高并发要求。

Vert.x 是什么

  • Polyglot(多种语言支持) (Java, JavaScript, Groovy, and Ruby)
  • Simplicity 编写的代码是完全基于异步事件的,异步执行并且通信是无阻塞的
  • Scalability(可扩展) 基于Actor模型
  • Concurrency(并发性) Vert.x本身内置三种线程池帮你处理
  • Modular(模块化) Vert.x本身内置强大的模块管理机制
  • 分布式消息传输 Vert.x基于分布式Bus消息机制实现其Actor模型
  • WebSocket 支持WebSocket协议兼容SockJS

基本概念

Verticle

Vert.xAPI的代码就是一个Verticle.他可以用Scala Clojure JS Ruby等语言实现. 多个Verticle实例可以并行的被执行.一个基于Vert.x的服务也许需要多个verticles来实现,而且要部署在多台服务器上. 他们之间通过vert.x事件进行通信.你可以之间通过vert.x命令启动,也可以将verticle包装成vert.x modules.(推荐这么做)

Module

Vert.x应用由一个或多个modules来实现.一个模块呢由多个verticles来实现.你可以把module想象出一个个Java package. 里面可能是特定业务的实现,或者公共的服务实现(那些可以重用的服务).Vert.x编写好的module,可以发布到maven的仓库里. 以zip包装成二进制格式.或者发布到vert.x module 注册中心.实际上这种以模块方式的开发,支撑着整个Vert.x生态系统. Module更多的信息,我需要单独开一个系列来讲解.

Vert.x 实例

Verticles 其实是跑在 Vert.x实例上的.所谓Vert.x实例其实就是一个运行在某一个JVM上的Vert.x对象实例. 可以将多个Verticles运行在一个Vert.x实例上,而vert.x实例可以跑在单个JVM上,也可以跑在其他JVM上,通过分布式event bus 来维持通信.注意vert.x实例其实是由vertx命令行启动的.你可以指定实例数目在单个JVM上.

Event Loops

上面提到Vert.x实例,每个Vert.x实例内部维持几个线程,线程数目基本与CPU核数一致.这些线程在Vert.x内部叫做事件循环(Event Loop) 这个思想在很多事件驱动的架构都有,典型的就是IOS事件,它操作系统内部也有一个事件监控线程,不停捕捉外部的事件,比如touch,多点触摸等. 然后分配到指定的处理函数上,在vert.x里这些处理函数是Handler接口. 在Vert.x里这些事件可以是从Socket里读到数据,或者是一个定时器触发,亦或是一个HTTP请求接受到. 一个部署好的verticle都会得到一个event loop,来处理相关的事件.相关的后续的处理都会在这个event loop解决掉(也就是一个线程里) ,注意在同一个时间里有且只有一个线程处理.即Handler接口里是线程同步的.这点非常类似 reactor pattern.

不要在Event Loops写一些阻塞代码,因此下面code不应该存在

阻塞处理

事件处理之外肯定会发生其长时间数据处理请求.比如处理一个图片上传,然后转存到磁盘上等.或者一次长时间的排序计算等. 在Verticle类型里,有一种特别的verticle叫做Worker.不同于标准的verticle,他不使用event loop.而是采用vert.x内部的 另一个线程池叫做worker pool.

其区别在于,worker verticles不会并行的执行Handler.而是阻塞式的,等待上一个Handler处理完了,才会再执行后面的请求.你可以 想象出队列的方式执行某些请求.

所以为了支持标准的与阻塞式的worker verticles, Vert.x 提供了一种混合线程模型,你可以选择适当的模型用于你的应用. worker verticle是一种阻塞式的方法,但是不可以做到并发水平扩展的

共享数据

消息通过Bus可以在各个Vert.x实例直接传输.但是如果多个Verticle在一个Vert.x实例内,是可以避免进行消息传输的.比如单个JVM内,你不会 通过Socket互相在两个Java 对象之间传输消息吧.但是因为实例隔离,因为Actor模型,所以对象数据如果要传到Handler里,必须通过消息传输. Vert.x提供了一个简单的共享Map与Set来解决这个问题.数据被存储到一个不可变的数据结构了,各个实例直接通过此API获取数据.(看例子更容易)

Core API提供
  • TCP/SSL servers and clients
  • HTTP/HTTPS servers and clients
  • WebSockets servers and clients
  • The distributed event bus
  • Periodic and one-off timers
  • Buffers
  • Flow control
  • File-system access
  • Shared map and sets
  • Accessing configuration
  • SockJS

安装

verx.io下载3.0,解压设置环境变量
vertx -version

Hello world

package vertx;   
import io.vertx.core.AbstractVerticle;
public class Server extends AbstractVerticle{
  public void start () throws Exception {
    vertx.createHttpServer().requestHandler(req -> {
       req.response()
       .putHeader("content-type", "text/plain")
       .end("Hello World.");
        }).listen(8080);
   }
}

vertx run Server.java

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容