vertx的学习总结2

简介: 本文是关于Vert.x的学习总结,包括Verticle的概念、如何编写和部署Verticle、Vert.x的线程模型,以及如何传递配置参数。

一、什么是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<JavaExec>("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%n</pattern>
</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里面多加了一个配置参数。

目录
相关文章
|
1月前
|
Java
vertx的学习总结3
本文介绍了Vert.x中的Event Bus及其通信机制,包括点对点、请求-应答和发布-订阅三种通信模式的示例代码,以及如何在不同节点间使用Event Bus进行通信。
21 3
vertx的学习总结3
|
1月前
|
JavaScript 前端开发 Java
vertx的学习总结1
本文概述了Vert.x的特点,包括其异步非阻塞的编程模型、多语言支持、响应式编程能力、内置网络支持和模块化设计,并讨论了异步与响应式编程的关系,分布式系统的必要性,以及Vert.x的替代方案。
66 1
|
1月前
|
Java Maven Kotlin
vertx的学习总结7之用kotlin 与vertx搞一个简单的http
本文介绍了如何使用Kotlin和Vert.x创建一个简单的HTTP服务器,包括设置路由、处理GET和POST请求,以及如何使用HTML表单发送数据。
37 2
vertx的学习总结7之用kotlin 与vertx搞一个简单的http
|
数据处理
谈谈对PureMVC的理解
谈谈对PureMVC的理解
61 0
谈谈对PureMVC的理解
|
设计模式 网络协议 Java
JAVA-stateless4j StateMachine从入门到实战
JAVA-stateless4j StateMachine从入门到实战
309 0
|
SQL XML NoSQL
SpringData 基础篇
SpringData 基础篇
119 0
|
Java
mina-statemachine源码解析-目录
mina-statemachine源码解析-目录
76 0
|
SQL 存储 Java
【java_wxid项目】【第十四章】【Spring Cloud Stream集成】
【java_wxid项目】【第十四章】【Spring Cloud Stream集成】
155 0
|
Java 应用服务中间件 Apache
webservice开发不得不知的细节,Error creating bean with name ‘org.apache.cxf.jaxws.EndpointImpl---1987203924‘
webservice开发不得不知的细节,Error creating bean with name ‘org.apache.cxf.jaxws.EndpointImpl---1987203924‘
161 0
|
Java Spring
《杜万-Java reactive programming - Reactor 3 and Spring WebFlux》电子版地址
杜万-Java reactive programming - Reactor 3 and Spring WebFlux
85 0
《杜万-Java reactive programming - Reactor 3 and Spring WebFlux》电子版地址