一、并发组合执行。CompositeFuture.all 接受多个future参数(最多6个);当所有的future都成功了,就返回成功的future,否则只要有一个失败就会返回失败(failed)的future:
Future<JsonObject> fut1 = Future.future();
Future<JsonObject> fut2 = Future.future();
Future<JsonObject> fut3 = Future.future();
Future<JsonObject> fut4 = Future.future();
Future<JsonObject> fut5 = Future.future();
Future<JsonObject> 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<Void> startFuture = Future.future();
Future<Void fut1 = Future.future();
fs.createFile("/foo", fut1.completer());
fut1.compose(v -> {
// What the file is created (fut1), execute this:
Future<Void> 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的使用