vertx异步编程测试
vertx是异步编程的框架,性能较高,开发简单。异步编程就是当一个请求来了,vertx将其交由一个事件进行处理,然后继续向下执行,等处理完成,返回结果,通知客户端。这是一个由服务端反向调用客户端的过程。
大多数app只是一个vertx对象。
继承abstractVerticle就会获得一个组件,里面包含vertx对象。
下面创建一个vertx工程,查看其具体执行流程,使用maven 项目构建工具
1:向pom.xml中添加依赖
<!-- vertx -->
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
<version>3.2.1</version>
</dependency>
2:创建Server.java,主要进行路由功能,将请求转发给服务。
package studyNote01; import io.netty.handler.codec.http.HttpContentEncoder.Result;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Handler;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.ext.web.Router; public class Server01 extends AbstractVerticle{ public void start(){ //服务一发布就会执行start
Router router=Router.router(vertx);
System.out.println("enter"); vertx.setPeriodic(1000, id->{
System.out.println("timer"); //每1000毫秒,打印一次,也就是说1000毫秒的逻辑执行完成,后面的就会被触发
}
); Handler handler;
router.routeWithRegex("/sp1").handler( //对url请求进行拦截并处理
//ctx应用上下文
ctx -> vertx.eventBus().<String> send( //vertx.eventBus()事件总线,可以与参数里面的地址进行通信,能够在所有vertx之间进行通信
//<String> 向服务发送的Message里面包含的类型。可以是对象等
Service01.URL01, //请求转发的地址,交由相应的服务对事件进行处理
"Hello Vertx1", //Message中的内容。有上面的String决定<String>
result -> { //服务将事件处理完成,返回的结果
if(result.succeeded()) //处理成功后执行的逻辑
System.out.println(result.result().body());
//ctx.reroute("");可以进行二级路由
System.out.println("testi1");
ctx.response() //响应,和面可以跟响应内容,如setstatus()等
.end();
}
)
);
System.out.println("test1"); router.routeWithRegex("/sp2").handler(
ctx -> vertx.eventBus().<String> send(
Service01.URL02,
"Hello Vertx2",
result -> { //这是一个Handler,当结果准备好时,它就会被调用
if(result.succeeded()) //如果成功,后台将会通知来执行这个。
System.out.println(result.result().body());
System.out.println("testi2");
ctx.response()
.end();
}
)
);
System.out.println("test2"); router.routeWithRegex("/sp3").handler(
ctx -> vertx.eventBus().<String> send(
Service03.URL03,
"Hello Vertx3",
result -> {
if(result.succeeded()) //如果成功,后台将会通知来执行这个。
System.out.println(result.result().body());
System.out.println("testi3");
ctx.response()
.end();
}
)
);
System.out.println("test3"); vertx.createHttpServer().requestHandler(router::accept).listen(8080);
}
}
3:创建服务,处理相应的事件,也要继承AbstractVerticle
Service01.java
package studyNote01; import io.vertx.core.AbstractVerticle;
import io.vertx.core.cli.Option; public class Service01 extends AbstractVerticle{ public static final String URL01="VERTX_HELLO_SERVER01";
public static final String URL02="VERTX_HELLO_SERVER02"; public void start(){
vertx.eventBus().consumer(URL01,
msg -> {
System.out.println(msg.body()); //处理请求消息
System.out.print("url01"); //相当于其它逻辑
msg.reply("success01"); //返回给result
}
);
vertx.eventBus().consumer(URL02,
msg -> {
System.out.println(msg.body());
System.out.print("url02"); //相当于其它逻辑
msg.reply("success02"); //返回给result
}
);
}
}
Service03.java
package studyNote01;
import io.vertx.core.AbstractVerticle;
public class Service03 extends AbstractVerticle{
public static final String URL03="VERTX_HELLO_SERVER03";
public void start(){
vertx.eventBus().consumer(URL03, //处理总线发送过来的相应的事件
msg -> { //msg消息发送过来的消息
System.out.println(msg.body()); //处理请求消息
System.out.print("url03"); //相当于其它逻辑
msg.reply("success03"); //对事件进行返回结果,相当于事件中的result
}
);
}
}
4:创建主函数对象进行发布
package studyNote01;
import io.vertx.core.Vertx;
public class Main01 {
public static void main(String[] args) {
Vertx vertx=Vertx.vertx();
vertx.deployVerticle(new Service01());
vertx.deployVerticle(new Server01());
vertx.deployVerticle(new Service03());
}
}
5:访问
浏览器地址栏依次输入
http://localhost:8080/sp1
http://localhost:8080/sp2
http://localhost:8080/sp3
后台打印数据:
enter
test1
test2
test3
Hello Vertx1
url01success01
testi1
timer
timer
timer
Hello Vertx2
url02success02
testi2
timer
timer
Hello Vertx3
url03success03
testi3
timer
timer
timer
timer
vertx异步编程测试的更多相关文章
- vertx 异步编程指南 step8-使用RxJava进行反应式编程
vertx 异步编程指南 step8-使用RxJava进行反应式编程 2018-04-23 13:15:32 zyydecsdn 阅读数 1212 收藏 更多 分类专栏: vertx 到目前为止 ...
- Task 异步编程测试案例及基础应用说明
对于多线程,我们经常使用的是Thread.在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于“任务的编程模型”所冲击,因为tas ...
- vertx 异步编程指南 step7-保护和控制访问
保护和控制访问与Vert.x很容易.在本节中,我们将: 从HTTP转移到HTTPS,以及 使用基于组的权限将用户身份验证添加到Web应用程序,以及 使用JSON Web令牌(JWT)控制对Web AP ...
- .net异步编程
现在电脑大部分都是多核心,在处理多线程方便有很大优势,异步调用方法的时候可以立即返回执行其他程序,进行异步编程会让程序运行效率更高. 我也是刚刚关注异步编程方面知识,也有很多不是很理解,所以想向大神请 ...
- C#与C++的发展历程第三 - C#5.0异步编程巅峰
系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...
- [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程
怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html ...
- 深入解析js异步编程利器Generator
我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就 ...
- JS魔法堂:深究JS异步编程模型
前言 上周5在公司作了关于JS异步编程模型的技术分享,可能是内容太干的缘故吧,最后从大家的表情看出"这条粉肠到底在说啥?"的结果:(下面是PPT的讲义,具体的PPT和示例代码在h ...
- JavaScript异步编程的主要解决方案—对不起,我和你不在同一个频率上
众所周知(这也忒夸张了吧?),Javascript通过事件驱动机制,在单线程模型下,以异步的形式来实现非阻塞的IO操作.这种模式使得JavaScript在处理事务时非常高效,但这带来了很多问题,比如异 ...
随机推荐
- 页面调用Iframe中数据
<iframe src="html的路径(至于MVC中cshtml直接路径好像是不行的,得使用action进行请求出来的路径)" id="iframechild&q ...
- 某MDU产品OMCI软件升级加速方案
说明 本文基于某GPON MDU产品的当前情况,提出OMCI升级的加速方案. 因时间仓促和水平限制,文中难免存在错漏和不足之处,敬请指正. 一 问题提出 根据G.988标准相关描述,软件升级过程可分 ...
- 【前端积累】javascript事件
什么是事件? 事件是一种异步编程的实现方式,本质上是程序各个组成部分之间的通信.就是文档或浏览器窗口发生的一些特定的交互瞬间(某种动作). 1.事件流 事件流描述的是从页面中接收事件的顺序. 1)事件 ...
- eagle学习汇总
一.原理图编辑器 1. 编辑->全局属性->可以设置全局变量,选择“文本框”,以‘>’开头代表引用全局属性的值. 2. 绘制->Frame->可绘制原理图边框,一般选择“ ...
- Firefox --- 火狐浏览器下载
http://www.firefox.com.cn/download/
- OpenStack Networking – FlatManager and FlatDHCPManager
最好的分析FlatDHCPManager的源文,有机会把这篇翻译了 =========================== Over time, networking in OpenStack has ...
- MySQL大数据量分页性能优化
mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...
- Office Online Server2016安装手册
Office Online Server2016安装手册 1.加入域 加入域,机器名为:OOS.Contoso.com 2.安装前提条件 运行powershell检查先决条件 Add-WindowsF ...
- mac下安装启动Mongodb
本人最近才上手mac,在使用mac上面有很多不熟悉的地方,慢慢摸索,记录下来,以供后续翻阅与参考: 在Mac下安装MongoDB方式 第一种.用浏览器或者第三方工具下载当前版本的下载地址: http: ...
- iOS - Reveal逆向分析任意iOS应用的UI界面
在iOS逆向工程中,Reveal扮演着重要角色,一般情况下,Reveal在iOS开发过程中可以分析UI界面的状态,同样也可以应用于分析其他任意的App.Reveal是一个很强大的UI分析工具,可非常直 ...