Node.js/Redis - Ждать подключения?

Я разрабатываю приложение на Node.js, которое использует Redis в качестве основной базы данных и возвращается к MySQL, когда Redis недоступен.

У меня проблема в том, что, в отличие от node-mysql, node_redis не принимает обратный вызов метода createClient() и просто выдает ошибку в случае сбоя.

Как я могу структурировать свой код, чтобы справиться с этим?

В основном мне нужно это (псевдокод):

if can_connect_on_redis
    use_redis
else
    if can_connect_mysql
       use_mysql
    else
       fail
    end
end

person Schrute    schedule 21.09.2014    source источник


Ответы (1)


Непроверенный:

var client  = redis.createClient();
var isReady = false;
var isError = false;

client.on('error', function() {
  if (! isReady && ! isError) {
    // perform your MySQL setup here
  }
  isError = true;
}).on('ready', function() {
  isReady = true;
});

Идея состоит в том, что когда вы получаете сообщение об ошибке до того, как клиент будет готов, вы можете предположить, что соединение с Redis не удалось, и вы можете вернуться к использованию MySQL. Поскольку клиент попытается переподключиться, он будет продолжать генерировать события ошибок, отсюда и защита isError.

Если вы хотите вернуться к MySQL после того, как клиент смог (успешно) установить соединение (например, когда сервер Redis остановлен), вы можете удалить логику isReady.

person robertklep    schedule 21.09.2014
comment
Благодарность! ваш код работает нормально, я просто добавил немного логики, чтобы проверить количество попыток подключения, и как только он достигает 3, я вызываю client.end(), чтобы прекратить попытки и использовать mysql - person Schrute; 21.09.2014