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在处理事务时非常高效,但这带来了很多问题,比如异 ...
随机推荐
- (原)android修改文件所属的用户组
首先得安装了busybox: 命令如下: busybox fileName 其中的0表示root,改成1000则表示system,改成2000则表示shell.
- 启用PAE后虚拟地址到物理地址的转换
34 注册:2013-10 帖子:2013 精华:34 --> [原创]启用PAE后虚拟地址到物理地址的转换 安于此生 2013-11-3 20:54 16073 由常规的两级页表转换得不到 ...
- linux查看Raid磁盘阵列信息
软件raid:只能通过Linux系统本身来查看 cat /proc/mdstat 可以看到raid级别,状态等信息. 硬件raid: 最佳的办法是通过已安装的raid厂商的管理工具来查看,有cmdli ...
- 【H5】使用h5实现复制粘贴功能
方案一 : 可满足大部分浏览器正常使用 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- python爬虫---->scrapy的使用(一)
这里我们介绍一下python的分布式爬虫框架scrapy的安装以及使用.平庸这东西犹如白衬衣上的污痕,一旦染上便永远洗不掉,无可挽回. scrapy的安装使用 我的电脑环境是win10,64位的.py ...
- 深入理解 Neutron -- OpenStack 网络实现(1):GRE 模式
问题导读1.什么是VETH.qvb.qvo?2.qbr的存在的作用是什么?3.router服务的作用是什么? 如果不具有Linux网络基础,比如防火墙如何过滤ip.端口或则对openstack ovs ...
- 【Spring源码分析系列】搭建Spring实现容器的基本实现
前言 bean是Spring中最核心的东西,因为Spring就像一个大水桶,而bean就像是容器中的水,先新建一个小例子来看一下: 一.使用eclipse构建项目,项目结构如下 二.类文件内容 < ...
- 原生js--事件类型
1.表单事件: submit事件 reset事件 click事件 change事件 focus事件(不冒泡) (IE和ES5支持冒泡的focusin) blur事件(不冒泡) (IE和ES5支持冒泡的 ...
- [转载]几个有趣的Linux命令
本文给大家介绍几个有趣的Linux命令. 1. pv 命令 有时候我们在电影屏幕上看到一些字幕一个个匀速显示出来,像有人在边敲键盘,边显示一样.Linux上的pv命令可以实现这种效果. 默认情况下 ...
- sphinx配置文件详解
sphinx的配置文件是在配置的时候最容易出错的了: 我们先要明白几个概念: source:数据源,数据是从什么地方来的. index:索引,当有数据源之后,从数据源处构建索引.索引实际上就是相当于一 ...