关于 Vert.x 你应该知道的

作为一名 Java 的 web 后台工程师,如果你之前只知道 J2EE,SpringMVC,当你看到 Vert.x 的时候,我相信你一定会眼前一亮。一言以蔽之,它是 JVM 上的 Node.js。

Verticles

首先要提到一个概念叫 Verticle,Verticle 是一个组件,硬要类比的话 Verticle 之于 Vert.x 就像 servlet 之于 tomcat。下面就是一个 Verticle 的实现。当把这个 Verticle deploy 到 Vert.x 上的时候,web 服务就运行起来了,很酷有没有。

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

Vert.x 的线程模型

每个 Verticle 被 deploy 的时候,这个 Verticle 就被绑定到某个线程上了,也就是说 Verticle 是单线程执行的。好处是不用担心多线程同步的问题了,但是这岂不是没法发挥多核服务器的性能了吗?

接下来要提到 Vert.x 一个重要的部分—— Event Bus,如下图所示。看图说话,Verticle 之间通过 Event Bus 通信,发布/订阅模式,松耦合,再经典不过的架构了。


关于 Vert.x 你应该知道的_第1张图片
总线

Vert.x 可以为每个核心创建一个线程,每个线程可以绑定多个 Verticle。线程模型如下所示。


关于 Vert.x 你应该知道的_第2张图片
线程模型

所以为了发挥多核的性能,完全可以 deploy 一个 Verticle 用来接收和分发 http 请求,deploy 多个逻辑处理的 Verticle 来处理请求,这不就是 Reactor 模型吗,殊途同归啊。


参考资料:

  1. http://tutorials.jenkov.com/vert.x/overview.html
  2. http://vertx.io/

你可能感兴趣的:(关于 Vert.x 你应该知道的)