Vert.x - Core Verticle

Vert.x Verticle 这个东西第一次接触会感觉命名有点奇怪,暂且称它为组件吧,可以用它来组织自己的组件代码,如:TCPServer、HTTPServer、JDBCComponent等等。

Verticle

一个Vert.x程序一般由多个Verticle组成,不同的Vertilce通过消息总线进行通讯。
Verticle分为三种:

  • Stardand Verticle:最常用的一类Verticle,永远运行在 Event Loop 线程上。
  • Worker Verticle:会运行在Worker Pool中的线程上,一个实例不会被多个线程同时执行。
  • Multi-Threaded Worker Verticle:运行在Worker Pool中的线程上,一个实例可以由多个线程同时执行(需要保证线程安全)。

疑问:关于EventLoop和WorkerPool,类似Netty的ParentGroup和ChildGroup??

构建Verticle

构建Verticle可以通过继承AbstractVerticle实现,Verticle需要使用Vertx进行部署:

public class VerticleStater extends AbstractVerticle {
  public static void main(String[] args) {
    Vertx.vertx().deployVerticle(new VerticleStater());
  }
}

可以通过重写Verticle的start方法在Verticle部署的时候处理一些业务,通过重写stop来处理Verticle撤销的时候处理一些业务。

public class VerticleStater extends AbstractVerticle {

  @Override
  public void start(Promise<Void> startPromise) throws Exception {
    System.out.println("Verticle部署成功");
    startPromise.complete();
  }

  public static void main(String[] args) {
    Vertx.vertx().deployVerticle(new VerticleStater());
  }
}

Verticle不管是start,还是stop方法都有两个,一个只带Promise<Void>参数的,一个是不带参数的。

如果start里面的业务是耗时操作,那么需要异步处理后调用startPromise.complete(); ,同样的stop也是。

这个Promise看起来有点像ES6的Promise??

标准的Verticle运行在EventLoop上面,不能执行阻塞操作。


彩蛋:关注公众号、或小程序,阅读更多IT文章。

posted @ 2022-01-23 15:42  HiIT青年  阅读(152)  评论(0编辑  收藏  举报