ioredis ETIMEDOUT из службы приложений Azure, но локально работает нормально, IP добавлены в брандмауэр - PullRequest
2 голосов
/ 01 октября 2019

У меня есть Azure Redis Cache, который я сейчас тестирую. Он не используется / ничего не связано с этим, кроме того, что я пытаюсь сделать сейчас. Это часть самого основного плана C0.

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

[ioredis] Unhandled error event: Error: connect ETIMEDOUT
     at TLSSocket. (/home/site/wwwroot/node_modules/ioredis/built/redis/index.js:282:31)
     at Object.onceWrapper (events.js:273:13)
     at TLSSocket.emit (events.js:182:13)
     at TLSSocket.Socket._onTimeout (net.js:449:8)
     at ontimeout (timers.js:425:11)
     at tryOnTimeout (timers.js:289:5)
     at listOnTimeout (timers.js:252:5)
     at Timer.processTimers (timers.js:212:10)

Все хорошо и работает нормально, если я запускаю приложение локально. Я также добавил свой локальный IP-адрес и IP-адрес службы приложения в брандмауэр.

Моя конфигурация:

 host: this.get('REDIS_HOST'),
      port: 6380,
      password: this.get('REDIS_PRIMARY_KEY'),
      tls: true as any,
      connectTimeout: 1000,

и

import * as redis from 'ioredis';
redis: redis.Redis;

in constructor: 

this.redis = new redis(this.configService.getRedis());

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Моя конкретная проблема была вызвана настройкой только IP-адреса с блейда «настраиваемый домен» в службе приложений Azure вместо перехода в «Свойства» и копированием нескольких IP-адресов в конфигурацию кэша.

Как только я занес в белый список все правильные IP-адреса, все заработало.

Однако я столкнулся с случайным тайм-аутом из-за небольшой конфигурации connectionTimeout, установленной на 1000 мс вместо стандартных 10000 мс.

0 голосов
/ 08 октября 2019

Я пытался воспроизвести вашу проблему в моей среде, но потом обнаружил, что она вызвана тем, что значение connectTimeout слишком короткое и короче, чем значение по умолчанию 10000 из connectTimeout, определенное в export const DEFAULT_REDIS_OPTIONS: IRedisOptions, как показано ниже.

export const DEFAULT_REDIS_OPTIONS: IRedisOptions = {
  // Connection
  port: 6379,
  host: "localhost",
  family: 4,
  connectTimeout: 10000,
  //.....
}

Если бы я установил значение connectTimeout с помощью 1000 или даже 100, у меня возникла бы такая же проблема с вашей в моей среде, как на рисунке ниже. .

enter image description here

Поэтому, пожалуйста, попробуйте удалить свойство connectTimeout и использовать значение по умолчанию или просто установить значение времени ожидания больше, чем значение по умолчанию.

...