0

我是 vert.x 的新手,想知道是否有可能以某种方式配置 eventbus 以使其始终如一地工作?

我的意思是需要使用 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();
                });
            });
4

1 回答 1

1

基本思想是将其提取到一个函数中,您将递归调用该函数。

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);
                    }
                });
} 
于 2020-08-11T13:23:58.210 回答