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. window下线程同步之(Mutex(互斥器) )

    使用方法: 1.创建一个互斥器:CreateMutex: 2.打开一个已经存在的互斥器:OpenMutex: 3.获得互斥器的拥有权:WaitForSingleObject.WaitForMultip ...

  2. Android——使用 Intent传递类

    定义要传递的类事,必须加上 public class Movie implements Serializable { } 传入类: public void onItemClick(AdapterVie ...

  3. 【技术分享会】 @第四期 JQuery插件

    本讲内容 JavaScript JQuery JQuery插件 实例 JavaScript 前端开发工程师必须掌握的三种技能 描述内容的HTML 描述网页样式的CSS 描述网页行为的JavaScrip ...

  4. 【Eclipse】启动时报错:No Java virtual machine (已解决)

    在 Ubuntu 上下了个最新的 Eclipse ,解压后运行报这样的错误: 当然 JDK 的安装及环境变量的配置是没有问题的.使用 java -version 查询本机的JDK版本是可以的. 如果不 ...

  5. openstack-networking-neutron(一)---端到端和点到点的理解

    本博客已经添加"打赏"功能,"打赏"位置位于右边栏红色框中,感谢您赞助的咖啡. ====本文目的===== 理解搞清楚两个概念: 1.端到端    2.点到点  ...

  6. Unity3D Animator控制参数和添加事件

    Animator控制参数和添加事件 using UnityEngine; using System.Collections; public class AniControl : MonoBehavio ...

  7. CreateTimerQueueTimer在DllMain中调用导致的loader lock

    开发一个COM组件在Windows 7上注册成功,但是Windows XP SP3版本却导致regsvr32.exe进程挂起.用WinDbg查看发现提示: Break- seconds... WARN ...

  8. 使用jvisuamvm的btrace插件

    在之前的文章中写了如何使用btrace来监控运行中的jvm的方法的参数和返回值 jvisualvm中提供了一个btrace插件,我们可以更方便地attach到一个运行中的jvm 更方便地执行和停止bt ...

  9. Modelsim SE 仿真 ALTERA FPGA IP

    Modelsim SE 仿真 ALTERA FPGA IP 最近,有几个朋友问过我是不是有新版本的Modelsim altera,其原因是 Qii 升级为新版本的,但是没配套的modelsim,没办法 ...

  10. java的多态示例

    子类是父类的类型,但父类不是子类的类型. 子类的实例可以声明为父类型,但父类的实例不能声明为子类型. class Vehicle {} public class Car extends Vehicle ...