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在处理事务时非常高效,但这带来了很多问题,比如异 ...
随机推荐
- 网卡bonding模式 - bond0、1、4配置
网卡bonding模式 - bond0.1.4配置 网卡bonding简介 网卡绑定就是把多张物理网卡通过软件虚拟成一个虚拟的网卡,配置完毕后,所有的物理网卡的ip和mac将会变成相同的.多网卡同时工 ...
- Capistrano 部署rails 应用
1 安装 gem install capistrano // For mutiple stages gem install capistrano-ext 2 准备 capify . 这个命令会创建Ca ...
- 深入浅出WPF之Binding的使用(一)
在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件对象:这 ...
- python pytest测试框架介绍三
之前介绍了pytest以xUnit形式来写用例,下面来介绍pytest特有的方式来写用例 1.pytest fixture实例1 代码如下 from __future__ import print_f ...
- python基础-动态加载lazy_import(利用__import__)
看了一天动态加载,普遍有这么几种方法,总结一下,由简入深,本文仅对查到的栗子们做个引用……省去你们大把查资料的时间= = 主要思想:把模块(文件)名.类名.方法名当成了变量 然后利用__import_ ...
- 构建Maven项目时常见错误
一.Maven项目,右键-update project后JRE system Library变为JavaSE1.6 Dynamic Web Module 3.0 requires Java 1.6 o ...
- Mysql----索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- 从UE(用户体验)到道家誓学再到李小龙
公司大Boss经常会给我做技术培训,感觉他什么都知道,也挺喜欢听他的课. 本文记录可能比较天马行空,我的语文比较差,很难把自己想表达的说出来,为此我就是记录一样关键字,可能这样还会更好些 背景是讲用户 ...
- codeforces 586B/C
题目链接:http://codeforces.com/contest/586/problem/B B. Laurenty and Shop time limit per test 1 second m ...
- HDU 1686 - Oulipo - [KMP模板题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 Time Limit: 3000/1000 MS (Java/Others) Memory Li ...