当前位置: 首页 > news >正文

vertx的学习总结2

一、什么是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 {@Overridepublic 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里面多加了一个配置参数。

http://www.lryc.cn/news/180889.html

相关文章:

  • 网络安全内网渗透之DNS隧道实验--dnscat2直连模式
  • 探索ClickHouse——连接Kafka和Clickhouse
  • 基于监督学习的多模态MRI脑肿瘤分割,使用来自超体素的纹理特征(Matlab代码实现)
  • 【RocketMQ】(八)Rebalance负载均衡
  • 线性筛和埃氏筛
  • 【Java 进阶篇】JDBC ResultSet 类详解
  • Centos7常用服务脚本(.service)
  • MySQL 视图View的SQL语法和更新(视图篇 二)
  • 38 翻转二叉树
  • 数据结构-快速排序-C语言实现
  • 玩客云Armbian_23.08.0-trunk_Onecloud_bookworm_edge_6.4.14.burn配置
  • Nginx查找耗时的接口
  • C++ Primer 一 变量和基本类型
  • 实体行业数字化转型怎么做?线上线下相结合的新零售体系怎么做?
  • JAVA面经整理(5)
  • 【牛客网-面试必刷TOP101】二分查找题目
  • 【QT】自定义组件ui类添加到主ui界面方法
  • FFmpeg 多图片合成视频带字幕和音乐+特效(淡入淡出,圆圈黑色淡出)
  • 上网Tips: Linux截取动态效果图工具_byzanz
  • 下载盗版网站视频并将.ts视频文件合并
  • ElasticSearch - 基于 拼音分词器 和 IK分词器 模拟实现“百度”搜索框自动补全功能
  • 【kubernetes】kubernetes中的调度
  • java读取csv文件或者java读取字符串,找出引号内容,采用正则表达式书写
  • 【寻找关键钥匙】python实现-附ChatGPT解析
  • 基于 QT 实现一个 Ikun 专属桌面宠物
  • 新闻报道的未来:自动化新闻生成与爬虫技术
  • C++ 并发编程实战 第八章 设计并发代码 二
  • list(链表)
  • 使用代理IP进行安全高效的竞争情报收集,为企业赢得竞争优势
  • 【数学知识】一些数学知识,以供学习