一、什么是verticle
verticle是vertx的基本单元,其作用就是封装用于处理事件的技术功能单元 (如果不能理解,到后面的实战就可以理解了)
二、写一个verticle
1. 引入依赖(这里用的是gradle,不会吧,不会吧,都学这个了还有人不会gradle 0.0)
- plugins {
- java
- }
- repositories {
- mavenCentral()
- }
- dependencies {
- implementation("io.vertx:vertx-core:VERSION")
- implementation("ch.qos.logback:logback-classic:1.2.3")
- }
- tasks.create
("run") { - main = project.properties.getOrDefault("mainClass","chapter2.hello.HelloVerticle") as String
- classpath = sourceSets["main"].runtimeClasspath
- systemProperties["vertx.logger-delegate-factory-class-name"] ="io.vertx.core.logging.SLF4JLogDelegateFactory"
- }
- java {
- sourceCompatibility = JavaVersion.VERSION_1_8
- }
logback.xml 文件
- <configuration>
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>%level [%thread] %logger{0} - %msg%npattern>
- encoder>
- appender>
- <logger name="io.netty" level="warn"/>
- <root level="debug">
- <appender-ref ref="STDOUT"/>
- root>
- configuration>
代码
- package org.example;
-
-
- import io.vertx.core.AbstractVerticle;
- import io.vertx.core.Vertx;
- import io.vertx.core.http.HttpServerOptions;
-
- public class Tearch extends AbstractVerticle {
- @Override
- public void start() throws Exception {
- vertx.createHttpServer(new HttpServerOptions().setPort(8080)).requestHandler(req->{
- req.response().end("hello word");
- }).listen();
- }
-
- public static void main(String[] args) {
- Tearch tearch=new Tearch();
- Vertx vertx1=Vertx.vertx();
- vertx1.deployVerticle(tearch);
- }
- }
好,现在让我们想一下
当事件循环被阻塞时会发生什么?
答案:会报错,它那个有个超时检测,不信你可以让它执行一个whlie(true),这里忘记说了setTimer是延迟任务

设置检测时间

在存在异步初始化工作的情况下,如何延迟生命周期完成的通知? 答:使用Async.await()方法等待异步操作完成。或者用public void start(Promise promise) 这个有应答的方法,具体操作如下

在这里我先声明如下,这里的所有截图都是采自vert.x in Action的那本入门英语书
三、一个verticle的部署和卸载

在一个定时任务中可以通过deplay()方法进行部署

自然也是可以通过定时任务进行卸载
四、接下来我们讲vertx的线程模型
默认情况下,为Vert.x创建的事件循环线程数是CPU内核数的两倍。如果你有8个核心,那么一个Vert.X应用程序有16个事件循环。
这给了我们一个有趣的教训:虽然一个verticle总是使用相同的事件循环线程,但事件循环线程是由多个verticle共享的。这种设计使运行应用程序的线程数量可预测。
提示:可以调整可用的事件循环数量,但不可能手动为特定事件循环分配给定的垂直方向。这在实践中不应该是一个问题,但在最坏的情况下,您总是可以计划顶点的部署顺序。
在 Vert.x 中,所有的事件处理器都运行在一个事件循环线程池中,称为 Event Loop。Event Loop 是一个单线程,负责接收、分发和处理事件。
当一个事件到达时,Vert.x 会将事件分派给空闲的 Event Loop 线程进行处理。Event Loop 会按照注册的事件处理器顺序依次执行,并且在执行过程中不会被阻塞。如果某个事件处理器需要执行一个耗时的操作,可以将其委托给 Worker 线程池进行处理,以免阻塞 Event Loop。
Worker 线程池是一个可配置的线程池,用于执行耗时的操作。通过将耗时的操作委托给 Worker 线程池,可以避免阻塞 Event Loop,提高系统的并发性能。

总结起来,Vert.x 的线程模型使用了事件循环和异步编程模型,通过 Event Loop 和 Worker 线程池来处理事件并发和耗时操作,以提高系统的吞吐量和响应性能。
五、传递配置参数如下:

从代码上看就是 deployVerticle里面多加了一个配置参数。