У меня есть небольшое приложение vertx. Вертикаль http получает запрос и отправляет его по шине событий с шаблоном запрос-ответ. Так что что-то вроде:
vertx.eventBus().request(queue, request, options, reply -> {
if (reply.succeeded()) {
JsonObject body = (JsonObject) reply.result().body();
context.response().end(body.encode());
} else {
JsonObject result = new JsonObject().put("errorMessage", reply.cause().getMessage());
context.response().end(result.encode());
}
});
В вертикальной базе данных я использую потребителя, чтобы получить сообщение go в БД, внести некоторые изменения и отправить обратно в HTTP-версию. Моя проблема в том, что у меня есть действие удаления, которое должно выполнять множество проверок, поэтому этот процесс может занять до 10 секунд. В этот момент HTTP-версия все еще может получать некоторые новые запросы, но потребитель БД ничего не получает, пока не будет выполнено действие удаления. Так что запросы не обрабатываются. Единственное, что помогает, - это многопоточность по вертикали БД, и это лишнее. Vertx.executeBlocking или JAVA Пул потоков вокруг выполнения БД также не помогает, поскольку потребитель просто ничего не получит, пока не ответит. Я что-то упускаю? Спасибо