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里面多加了一个配置参数。
相关文章:
vertx的学习总结2
一、什么是verticle verticle是vertx的基本单元,其作用就是封装用于处理事件的技术功能单元 (如果不能理解,到后面的实战就可以理解了) 二、写一个verticle 1. 引入依赖(这里用的是gradle,不会吧&#…...
网络安全内网渗透之DNS隧道实验--dnscat2直连模式
目录 一、DNS隧道攻击原理 二、DNS隧道工具 (一)安装dnscat2服务端 (二)启动服务器端 (三)在目标机器上安装客户端 (四)反弹shell 一、DNS隧道攻击原理 在进行DNS查询时&#x…...
探索ClickHouse——连接Kafka和Clickhouse
安装Kafka 新增用户 sudo adduser kafka sudo adduser kafka sudo su -l kafka安装JDK sudo apt-get install openjdk-8-jre下载解压kafka 可以从https://downloads.apache.org/kafka/下找到希望安装的版本。需要注意的是,不要下载路径包含src的包,否…...
基于监督学习的多模态MRI脑肿瘤分割,使用来自超体素的纹理特征(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【RocketMQ】(八)Rebalance负载均衡
消费者负载均衡,是指为消费组下的每个消费者分配订阅主题下的消费队列,分配了消费队列消费者就可以知道去消费哪个消费队列上面的消息,这里针对集群模式,因为广播模式,所有的消息队列可以被消费组下的每个消费者消费不…...
线性筛和埃氏筛
线性筛: #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<ut…...
【Java 进阶篇】JDBC ResultSet 类详解
在Java应用程序中,与数据库交互通常涉及执行SQL查询以检索数据。一旦执行查询,您将获得一个ResultSet对象,该对象包含查询结果的数据。本文将深入介绍ResultSet类,它是Java JDBC编程中的一个核心类,用于处理查询结果。…...
Centos7常用服务脚本(.service)
Centos7常用服务脚本(.service) 注意:[Service]中配置路径必须使用绝对路径。 启停: systemctl { start | stop | restart | reload } xxx.service 自启动: systemctl { enable | disable } xxx.service nginx.se…...
MySQL 视图View的SQL语法和更新(视图篇 二)
视图语法基本操作 创建 -- [ ]表示可选 create [or replace] view 视图名称[(列名列表)] as select语句 [ with [cascaded | local ] check option ]; 添加(虽然视图是虚拟表,但是向视图操作的数据实际上会影响到实际关联的表数据) -- 视图添…...
38 翻转二叉树
翻转二叉树 理解题意,翻转即每个结点的左右子树翻转/对调题解1 递归——自下而上题解2 迭代——自上而下 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 提示: 树中节点数目范围在 [0, 100] 内-100 < Node.…...
数据结构-快速排序-C语言实现
引言:快速排序作为一种非常经典且高效的排序算法,无论是工作还是面试中广泛用到,作为一种分治思想,需要熟悉递归思想。下面来讲讲快速排序的实现和改进。 老规矩,先用图解来理解一下:(这里使用快…...
玩客云Armbian_23.08.0-trunk_Onecloud_bookworm_edge_6.4.14.burn配置
固定IP # interface file auto-generated by buildrootauto lo iface lo inet loopback// 上面是默认的内容,下面是新增的内容,上下之间需要一个空行隔开 // 接口顶格写,属性的前面有一个tab的缩进 # The primary network interfaceauto eth0 iface eth0 inet staticaddress 1…...
Nginx查找耗时的接口
Nginx查找耗时的接口 # grep 是筛选的域名 awk中的$5是判断的状态码 sort中的15是指的upstream_response_time 当然也可以统计request_time的时间cat access.log | grep zhhll.icu | awk $5 200{print $0} | sort -k 15 -n -r | head -10 https://zhhll.icu/2021/linux/实…...
C++ Primer 一 变量和基本类型
本章讲解C内置的数据类型(如:字符、整型、浮点数等)和自定义数据类型的机制。下一章讲解C标准库里面定义的更加复杂的数据类型,比如可变长字符串和向量等。 1.基本内置类型 C内置的基本类型包括:算术类型和空类型。算…...
实体行业数字化转型怎么做?线上线下相结合的新零售体系怎么做?
如今,实体行业想要取得收入增长,只做线下业务或者只做线上业务,在当前的市场环境中是难以长久生存的,因此一定要线上线下相结合,将流量运作与线下转化进行充分结合,才能更好地发挥实体优势,带来…...
JAVA面经整理(5)
创建线程池不是说现用先创建,而是要是可以复用线程池中的线程,就很好地避免了大量用户态和内核态的交互,不需要频繁的创建和销毁线程 一)什么是池化技术?什么是线程池? 1)池化技术是提前准备好一些资源,在…...
【牛客网-面试必刷TOP101】二分查找题目
目录 二维数组中的查找_牛客题霸_牛客网 (nowcoder.com) 寻找峰值_牛客题霸_牛客网 (nowcoder.com) 数组中的逆序对_牛客题霸_牛客网 (nowcoder.com) 旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com) 二维数组中的查找_牛客题霸_牛客网 (nowcoder.com) 题意:…...
【QT】自定义组件ui类添加到主ui界面方法
1.添加自定义组件到项目中 add new选择如下 写好类方法,确定即可 2.将新创建的ui类加入到主ui界面 选中新创建ui类的父类空块,右键选择提升为 选择并添加新创建的类...
FFmpeg 多图片合成视频带字幕和音乐+特效(淡入淡出,圆圈黑色淡出)
FFmpeg 多图片合成视频带字幕和音乐+特效(淡入淡出,圆圈黑色淡出) 效果图1. 报错及解决2. xfade、xfade_opeccl 特效切换3. ffmpeg命令行详解4. 源码4.1 auto.bash4.2 geneFade.py4.3 python moviepy合并视频及音频按照(视频长度截取对应的音频在合并)4.4 命令行记录参考这…...
上网Tips: Linux截取动态效果图工具_byzanz
链接1 链接2 安装: sudo apt-get install byzanz 查看指令 说明 byzanz-record --help日常操作 xwininfo点击 待录制窗口 左上角 byzanz-record -x 72 -y 64 -w 1848 -h 893 -d 10 --delay5 -c /home/xixi/myGIF/test.gif小工具 获取鼠标坐标 xdotool getm…...
【限时解密】Photoshop 25.5 Beta隐藏功能+Midjourney API私有化接入指南(含已验证Webhook配置模板与错误码速查表)
更多请点击: https://intelliparadigm.com 第一章:Midjourney与Photoshop整合方案的演进逻辑与架构全景 随着生成式AI在创意工作流中的深度渗透,Midjourney与Photoshop的协同已从“图像导出→手动精修”的离散模式,演进为基于API…...
LocalChat:零门槛本地部署开源大语言模型,实现隐私安全的离线AI对话
1. 项目概述与核心价值如果你和我一样,对ChatGPT这类大语言模型的能力感到兴奋,但又对数据隐私、服务依赖和网络延迟心存顾虑,那么LocalChat这个项目可能就是为你量身打造的。简单来说,LocalChat是一个让你能在自己电脑上…...
开源机械爪技术全解析:从结构设计到ROS集成开发指南
1. 项目概述与核心价值如果你是一名开发者,尤其是在开源社区里摸爬滚打过一阵子,那你肯定对“awesome-xxx”这类项目不陌生。它们通常是一个精心整理的列表,汇聚了某个特定技术领域或工具生态下的优质资源。今天要聊的这个fundgao/awesome-op…...
KMS_VL_ALL_AIO架构解析:Windows与Office智能激活的技术方案
KMS_VL_ALL_AIO架构解析:Windows与Office智能激活的技术方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款基于KMS协议实现的Windows和Office智能激活解决方案…...
CQDs-PEG/Biotin/@SiO2/Polymer,PEG修饰碳量子点的特性
中英文名称: CQDs-PEG,PEG修饰碳量子点 CQDs-Biotin,生物素偶联碳量子点 CQDsSiO2,二氧化硅包覆碳量子点 CQDsPolymer,聚合物包覆碳量子点 碳量子点(Carbon Quantum Dots, CQDs)作为一类新型零维…...
基于MCP协议与向量数据库的AI代码记忆系统实战指南
1. 项目概述:当AI助手拥有“长期记忆”最近在折腾AI应用开发的朋友,可能都遇到过同一个痛点:你让Claude或者GPT帮你分析一个复杂的代码库,第一次对话时,它能把项目结构、核心逻辑讲得头头是道。但当你第二天再打开聊天…...
动手写一个 JVM 调优学习项目:6 个真实场景带你掌握性能优化
动手写一个 JVM 调优学习项目:6 个真实场景带你掌握性能优化 项目地址: https://gitee.com/jiucenglou/jvm-tuning-lab 技术栈: Java 8 Maven 适合人群: Java 开发者、性能调优初学者、面试准备者 🤔 为什么写这个项目? 在实际开发和面试中…...
三极直接耦合放大电路参数优化
简 介: 本文探讨了三极直接耦合放大电路的优化设计。通过调整R3、R6等电阻参数,使Q3集电极偏置电压达到6V左右,实现了10V的输出动态范围。理论分析电路放大倍数为1000倍,实测为800倍。研究发现第一级放大管Q1处于弱放大状态&#…...
60 秒应急窗口下 AI 钓鱼攻击防御体系构建与工程实践
摘要 2026 年网络钓鱼攻击呈现秒级入侵、全域渗透、AI 驱动的显著特征,钓鱼邮件抵达至用户输入敏感信息的中位时间仅 60 秒,勒索软件攻击频率约每 2 秒一起,AI 自动化鱼叉式钓鱼点击率高达 54%,传统防御机制已无法适配当前威胁节奏…...
面试被问烂的20道编程基础题,你必须全会,不然别去面试
文章目录前言一、Python基础篇(6道)1. Python中list和tuple有什么区别?2. Python 3.7之后普通dict已经有序了,那OrderedDict还有存在的必要吗?3. Python中的深拷贝和浅拷贝有什么区别?4. Python中的*args和…...
