Как остановить потоки vertx?

Итак, вот ситуация: я реализую кеширование нашего веб-приложения с помощью vertx-redis (раньше мы использовали салат-латук). Довольно простой механизм, есть аннотация, которую мы используем на конечных точках, которая отвечает за вызов redis-client (какая бы реализация мы ни использовали), и, если есть кешированная информация для данного ключа, она должна использоваться как тело ответа, и запрос должен быть законченным без обработки.

Но есть действительно неприятное поведение с реализацией vertx-redis, в которой завершение запроса не останавливает обработку. Я делаю запрос, получаю быстрый ответ, так как информация была в кэше, но я все еще вижу в журналах, что приложение продолжает обработку, как если бы запрос все еще был открыт. Я считаю, что это потому, что я заканчиваю ответ внутри обработчика на вызов клиента Redis, например:

client.get("key", onResponse -> {
    if (onResponse.succeeded() && onResponse.result() != null) {
        //ending request from here
    }
});

Я понимаю, что, возможно, смогу воспроизвести поведение, как было раньше, если бы я мог сделать что-то вроде этого:

String cachedInfo = client.get("key").map(onResponse -> onResponse.result());
// endResponse

Но, как мы знаем, vertx-redis - это семантический API, и каждый метод возвращает один и тот же экземпляр RedisClient. Я тоже думал о том, чтобы сделать что-то вроде этого:

private String cachedInfo; 

...

client.get("key", onResult -> {
    if (onResponse.succeeded()) {
        this.cachedInfo = onResponse.result();
    }
});

if (cachedInfo != null) { // The value could be unset since the lambda is running in other thread 
    //end request
}

На самом деле не знаю, что делать, есть ли способ вернуть содержимое AsyncResult в переменную или, возможно, как-то синхронно установить его для переменной? Я также искал способы каким-то образом остановить весь поток текущего запроса, но пока не нашел удовлетворительного, неагрессивного решения, но я тоже открыт для этого варианта.

0 ответов

Другие вопросы по тегам