我是vert.x的新手,想知道是否可以以某种方式配置事件总线以使其一致工作?
我的意思是需要使用vert.x 逐个发送请求
目前,我得到了这段代码,它使用事件循环原理,并等待所有处理程序完成,但我不需要这么快完成,想法是同时将服务器从大量请求中释放出来。这里eb_send()
使用默认的EventBus.send()
方法。换句话说,我想执行所有带有阻塞的请求,在请求之前等待答案。
List<Future> queue = new ArrayList<>();
files.forEach(fileObj -> {
Future<JsonObject> trashStatusHandler = Future.future();
queue.add(trashStatusHandler);
eb_send(segment, StorageType.getAddress(StorageType.getStorageType(fileInfo.getString("storageType"))) + ".getTrashStatus", fileInfo, reply -> {
Entity dummy = createDummySegment();
try {
if (reply.succeeded()) {
//succeded
}
} catch (Exception ex) {
log.error(ex);
}
trashStatusHandler.complete();
});
});
基本思想是将其提取到一个函数中,然后递归调用。
public void sendFile(List<File> files, AtomicInteger c) {
eb_send(segment, StorageType.getAddress(StorageType.getStorageType(fileInfo.getString("storageType"))) + ".getTrashStatus", fileInfo, reply -> {
Entity dummy = createDummySegment();
try {
if (reply.succeeded()) {
//succeded
}
// Recursion
if (c.incrementAndGet() < files.size()) {
sendFile(files, c);
}
} catch (Exception ex) {
log.error(ex);
}
});
}