vertx 学习之Future

一、并发组合执行。CompositeFuture.all 接受多个future参数(最多6个);当所有的future都成功了,就返回成功的future,否则只要有一个失败就会返回失败(failed)的future:


			Future fut1 = Future.future();
			Future fut2 = Future.future();
			Future fut3 = Future.future();
			Future fut4 = Future.future();
			Future fut5 = Future.future();
			Future fut6 = Future.future();
            //阻塞代码以及在阻塞代码执行返回异步结果处理程序来完成的,开启一个线程异步执行
			vertx.executeBlocking(fut -> {
                 //内容
                fut1.complete(new JsonObject());
				fut.complete();
			}, false, null);
			vertx.executeBlocking(fut -> {
		        //内容
                fut2.complete(new JsonObject());
				fut.complete();
			}, false, null);
			vertx.executeBlocking(fut -> {
				//内容
                fut3.complete(new JsonObject());
			    fut.complete();
			}, false, null);
           vertx.executeBlocking(fut -> {
        	  //内容
               fut4.complete(new JsonObject());
        	   fut.complete();
           }, false, null);
           vertx.executeBlocking(fut -> {
        	   //内容
            fut5.complete(new JsonObject());
		    fut.complete();
			}, false, null);
           vertx.executeBlocking(fut -> {
                //内容
               fut6.complete(new JsonObject());
   		    fut.complete();
			}, false, null);
            //等所有的都结束后,合并在一起统一输出
			CompositeFuture.all(fut1,fut2,fut3,fut4,fut5,fut6).setHandler(ar -> {
				  if (ar.succeeded()) {
					  JsonObject r0 = ar.result().resultAt(0);
					  JsonObject r1 = ar.result().resultAt(1);
					  JsonObject r2 = ar.result().resultAt(2);
					  JsonObject r3 = ar.result().resultAt(3);
					  JsonObject r4 = ar.result().resultAt(4);
					  JsonObject r5 = ar.result().resultAt(5);
					 future.complete(r0.mergeIn(r1.mergeIn(r2.mergeIn(r3.mergeIn(r4.mergeIn(r5))))));
				  }else{
					 future.complete(new JsonObject());
				  }
			});
		

二、顺序组合执行。 compose 可以使用链的方式设置组合future(因此这种方式叫顺序组合)。

在这个的例子中,这3个操作都是链式的:

fut1   fut2     startFuture 

当这3个步骤都成功了,最终的future (startFuture)就成功了。然而,如果其中的一个步骤失败了,最终的future并也是失败的。

 

FileSystem fs = vertx.fileSystem();
Future startFuture = Future.future();
 
Future {
   // What the file is created (fut1), execute this:
   Future fut2 = Future.future();
   fs.writeFile("/foo", Buffer.buffer(), fut2.complter());
   return fut2;
}).compose(v -> {
    // When the file is written (fut2), execute this:
    fs.remove("/foo", "/bar", startFuture.completer());
}, 
// mark startFuture it as failed if any step fails.
startFuture);

https://blog.csdn.net/u011054333/article/details/76595444//vertx中http的讲解,webclient的使用

点击打开链接

 

你可能感兴趣的:(vertx)