Как восстановить клиента с предупреждением "Нет обработчика, ожидающего сообщения"?
При средней и высокой нагрузке (тестовая и производственная) при использовании клиента Redis Vert.x я получаю следующее предупреждение после нескольких сотен запросов.
2019-11-22 11:30:02.320 [vert.x-eventloop-thread-1] WARN io.vertx.redis.client.impl.RedisClient - No handler waiting for message: [null, 400992, <data from redis>]
В результате обработчик, предоставленный для вызова Redis (см. Ниже), не вызывается, и время ожидания входящего запроса истекает.
Handler<AsyncResult<String>> handler = res -> {
// success handler
};
redis.get(key, res -> {
handler.handle(res);
});
Реальная проблема заключается в том, что как только появляется предупреждение "Нет обработчика...", клиент Redis становится бесполезным, поскольку все дальнейшие вызовы Redis, сделанные через клиент, завершаются сбоем с тем же предупреждением, что приводит к тому, что обработчик не вызывается. У меня есть обработчик исключений, установленный на клиенте для попытки повторного подключения, но я не вижу попыток повторного подключения.
Как избавиться от этой проблемы? Любые обходные пути для облегчения серьезности также будут отличными.
Я использую vertx-core и vertx-redis-client 3.8.1 .
1 ответ
В предстоящем выпуске 4.0 эта проблема была решена, и скоро должен появиться выпуск, как скоро, я не могу точно сказать.
Проблема в том, что мы не можем легко перенести обратно из основной ветки в ветку 3.8, потому что на клиенте произошел серьезный рефакторинг, а кодовые базы сильно различаются.
Новый код использует пул соединений и был протестирован на одновременный доступ (и именно здесь возникает проблема, которую вы видите). Под нагрузкой запросы маршрутизируются по всем циклам событий, и очередь, которая поддерживает состояние между запросами в полете (запросы, отправленные в redis) и ожидающими обработчиками, рассинхронизируются в очень особых условиях.
Поэтому я сначала попробую посмотреть, можете ли вы уже начать переводить свой код на 4.0, вы можете попробовать 4.0.0-milestone3
версия, но чтобы все было в порядке, просто попробуйте последнюю master
в котором решено больше проблем в этой области.