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文章。
本文来自博客园,作者:HiIT青年,原文链接:https://www.cnblogs.com/itqn/p/15836546.html,禁止转载。
更多文章可以扫描小程序码进行查看,下面是小程序部分文章列表截图。