Redis соединение обрывается на Azure - PullRequest
0 голосов
/ 08 июня 2018

Мой экземпляр redis работает в док-контейнере на виртуальной машине Azure.Я подключаюсь к тому же экземпляру из моего локального приложения, а также из приложения Azure.Оба имеют одинаковую кодовую базу, но после некоторого простоя в обеих средах, если я пытаюсь запустить приложение Azure, оно перестает отвечать на запросы.Если я проверяю журнал redis, он показывает только 2 клиента (1 из них сам по себе).Таким образом, я вижу, что мое подключение к Redis из Azure завершено, но в моем журнале приложений Azure нет конца зарегистрированного подключения.Я использую node_redis для подключения к Redis из приложения.Я использую следующую стратегию повторения, которая приведена в качестве примера на node_redis.

retry_strategy: function (options) {
    if (options.error && options.error.code === 'ECONNREFUSED') {
        // End reconnecting on a specific error and flush all commands with
        // a individual error
        return new Error('The server refused the connection');
    }
    if (options.total_retry_time > 1000 * 60 * 60) {
        // End reconnecting after a specific timeout and flush all commands
        // with a individual error
        return new Error('Retry time exhausted');
    }
    if (options.attempt > 10) {
        // End reconnecting with built in error
        return undefined;
    }
    // reconnect after
    return Math.min(options.attempt * 100, 3000);
}

Не хватает какой-либо конфигурации на стороне Azure, которую необходимо выполнить?

1 Ответ

0 голосов
/ 09 июня 2018

Наконец-то я нашел решение и надеюсь, что никто не застрянет в такой ситуации.С помощью следующей ссылки я смог определить проблему.https://serverfault.com/questions/661704/azure-closing-idle-network-connections

Решение: Установите для tcp_keepalive в redis.conf значение меньше 240 Команды для использования redis-cli:

CONFIG SET tcp_keepalive 200

и проверьте настройки с помощью

CONFIG GET tcp_keepalive

Поскольку сервер Azure не совсем закрывает соединение, а только меняет отображение соединения, наш клиент не получает конечное событие или не вызывает retry_strategy.

...