Vertx EventBus заблокирован - PullRequest
0 голосов
/ 09 июля 2020

У меня есть небольшое приложение 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 Пул потоков вокруг выполнения БД также не помогает, поскольку потребитель просто ничего не получит, пока не ответит. Я что-то упускаю? Спасибо

1 Ответ

0 голосов
/ 21 июля 2020

Насколько я понимаю из вашего вопроса, вертикаль БД разворачивается одним экземпляром. Вертикаль БД нужно развернуть как воркер. Вы также можете развернуть несколько экземпляров этой вертикали, чтобы у вас всегда была одна вертикаль БД, которая может принять следующий запрос.

Предложение по оптимизации: если только действие удаления занимает так много времени, разделите это действие на специальная статья БД. Таким образом, ваша система будет более отзывчивой, и вы сможете контролировать, сколько статей DB- "delecte-action" развернуто, и, следовательно, количество подключений к базе данных может быть заблокировано на более длительное время.

...