到目前为止,我们已经掌握了如何编写、配置和部署Verticle,也掌握了如何处理阻塞式代码。通过对示例代码的日志进行观察与分析,我们也了解了Vert.x线程模型的一些关键元素。对Vert.x开发应用程序有了一个基本认识。现在是时候回顾和剖析Verticle了,看看它内部到底有什么。

Verticle及其环境

Verticle对象本质上是两个对象的组合。

为什么这么说,当然是看Verticle的源码得知:

image.png

通常每个JVM进程只需要一个Vert.x实例,Vert.x实例由多个Verticle共享。从

Vertx vertx = Vertx.*vertx*(); 我们可以得出这一个结论。

Vert.x实例提供了许多核心API来声明事件处理程序。前几章的示例代码中已经使用了Vertx.x的setTimer、setPeriodic、createHttpServer、deployVerticle等方法。

image.png

用户自定义的事件处理程序借助Verticle Context运行。Verticle Context使得

我们可以在Verticle与Eventloop上执行事件处理程序,从而遵循Vert.x线程模型。

Verticl Context细节

Context的创建

可以使用Vertx类中的getOrCreatContext()方法获取Verticle的Context对象。虽然Context对象几乎总是与Vertical关联,但是实际上也可以在Vertical之外创建Context对象。

    Vertx vertx = Vertx.vertx();

    vertx.getOrCreateContext()
      .runOnContext(v -> logger.info("ABC"));

    vertx.getOrCreateContext()
      .runOnContext(v -> logger.info("123"));

Context的应用