如何让 Vert.x EventBus.send 顺序处理请求?
How to make Vert.x EventBus.send process requests sequentially?
我是 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);
}
});
}
我是 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);
}
});
}