vertx常用方法示例

一、多个回调如何避免回调地域

方法:使用compose与Future

示例1:按顺序执行里面的回调方法
//回调方法1
private Future getStatus1(String id) {
    return Future.future(f -> {
        f.complete(true);
    });
}
//回调方法2
private Future getStatus2(boolean id) {
    return Future.future(f -> {
        f.complete(false);
    });
}

Future.succeededFuture()
.compose(v1 -> {
    getStatus1("1")
})
.compose(v2 -> {
    //现在这个v2 就代表getStatus1方法的返回值
    getStatus1(v2)
}).onComplete(a -> {
    //现在这个a 值为 false
    if (a.succeeded()) {
        //end
    }else{
        //end
    }
})
示例2: CompositeFuture 顺序执行/无序执行
//回调方法1
private Future getStatus1(String id) {
    return Future.future(f -> {
        f.complete(true);
    });
}
//回调方法2
private Future getStatus2(boolean id) {
    return Future.future(f -> {
        f.complete(false);
    });
}

List futures = new ArrayList(2);
futures.add(getStatus1("1"));
futures.add(getStatus1(true));
//join代表异步并发执行
//all代表按顺序执行,先执行
CompositeFuture.join(futures).onComplete(ar -> {
   if(ar.succeeded()) {
       CompositeFuture res = ar.result();
       boolean b1 = res.resultAt(0);//true
       boolean b2 = res.resultAt(1);//false
   }else{
       //error
   }
});

二.执行需要阻塞(io)的操作

 
  

 

vertx.executeBlocking(f -> {
    f.complete(res);
});

三.执行定时任务

public void start(Promise startFuture) {
    vertx.setPeriodic(3600 * 500, keys -> {
         //半小时更新一次
         getSetKeys();
    });
}

四.全局的安全的异步map

private static AsyncMap timeline = null;

//初始化
vertx.sharedData().getAsyncMap("Timeline", resultHandler ->{
     timeline = resultHandler.result();
});

//使用
timeline.get(id, resultHandler -> {
    JsonObject vinfo = (JsonObject) resultHandler.result();
});

你可能感兴趣的:(vertx,restful,后端,java,vertx)