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异步编程测试的更多相关文章

  1. vertx 异步编程指南 step8-使用RxJava进行反应式编程

    vertx 异步编程指南 step8-使用RxJava进行反应式编程 2018-04-23 13:15:32 zyydecsdn 阅读数 1212  收藏 更多 分类专栏: vertx   到目前为止 ...

  2. Task 异步编程测试案例及基础应用说明

    对于多线程,我们经常使用的是Thread.在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于“任务的编程模型”所冲击,因为tas ...

  3. vertx 异步编程指南 step7-保护和控制访问

    保护和控制访问与Vert.x很容易.在本节中,我们将: 从HTTP转移到HTTPS,以及 使用基于组的权限将用户身份验证添加到Web应用程序,以及 使用JSON Web令牌(JWT)控制对Web AP ...

  4. .net异步编程

    现在电脑大部分都是多核心,在处理多线程方便有很大优势,异步调用方法的时候可以立即返回执行其他程序,进行异步编程会让程序运行效率更高. 我也是刚刚关注异步编程方面知识,也有很多不是很理解,所以想向大神请 ...

  5. 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 ...

  6. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  7. 深入解析js异步编程利器Generator

    我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就 ...

  8. JS魔法堂:深究JS异步编程模型

    前言  上周5在公司作了关于JS异步编程模型的技术分享,可能是内容太干的缘故吧,最后从大家的表情看出"这条粉肠到底在说啥?"的结果:(下面是PPT的讲义,具体的PPT和示例代码在h ...

  9. JavaScript异步编程的主要解决方案—对不起,我和你不在同一个频率上

    众所周知(这也忒夸张了吧?),Javascript通过事件驱动机制,在单线程模型下,以异步的形式来实现非阻塞的IO操作.这种模式使得JavaScript在处理事务时非常高效,但这带来了很多问题,比如异 ...

随机推荐

  1. php 建立 搜索 分词树

    <?php /** * @author: xiaojiang 20140107 * php 建立分词树 * */ class Tree{ public $w = ''; public $subT ...

  2. 浅谈千万级PV/IP规模高性能高并发网站架构

    高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”. 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部 ...

  3. 【数据处理】SQL Server高效大数据量存储方案SqlBulkCopy

    要求将Excel数据,大批量的导入到数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 一个比较好的解决方案,就是采用SqlBulkCopy来处理存储数据. SqlBulkCopy存储大批量的数 ...

  4. Microsoft 设计原则

    在本文中 关于现代设计 技术为本 实现以较少投入取得极大成绩 迅速和流畅 真正实现数字化 合作共赢 相关主题 驱动出色设计的基础 我们相信遵循 Microsoft 设计原则可帮助你构建使用户感到愉悦并 ...

  5. Android四大组件之BrocastReceive

  6. Elasticsearch 学习之 分片未分配原因

    分片未分配的原因主要有: 1)INDEX_CREATED:由于创建索引的API导致未分配.2)CLUSTER_RECOVERED :由于完全集群恢复导致未分配.3)INDEX_REOPENED :由于 ...

  7. [原]RHEL7/Centos 7将网卡名称改为eth0

    ======问题===== rhel的网卡为enoxxxxxxxxx =====原因====== 从CentOS/RHEL7起,可预见的命名规则变成了默认.这一规则,接口名称被自动基于固件,拓扑结构和 ...

  8. 使用DnsCat反弹shell

    DnsCat技术特点 Dns隧道反弹shell DnsCat服务器的安装 #git clone https://github.com/iagox86/dnscat2.git #cd dnscat2 # ...

  9. iOS interface适配

  10. unity3d的优化场景技术LOD+IOC

    一.unity3d的优化场景技术  LOD+IOC 遮挡剔除(occlusion culling)其实就是在摄像机范围内的物体才被渲染出来,没有在视野范围内的,统统关掉渲染,这样能让性能大大提高. I ...