来自 Azure App Service 的 ioredis ETIMEDOUT,但在本地运行良好,IP 添加到防火墙
ioredis ETIMEDOUT from Azure App Service, but works fine locally, IP's added to firewall
我有一个正在测试的 Azure Redis 缓存。除了我现在正在尝试做的事情之外,used/nothing 并没有连接到它。它是最基本的 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());
我试图在我的环境中重现你的问题,然后我发现它似乎是由于 connectTimeout
值太短并且比 [=11= 的默认值 10000
短] 在 export const DEFAULT_REDIS_OPTIONS: IRedisOptions
中定义如下。
export const DEFAULT_REDIS_OPTIONS: IRedisOptions = {
// Connection
port: 6379,
host: "localhost",
family: 4,
connectTimeout: 10000,
//.....
}
如果我将 connectTimeout
值设置为 1000
甚至 100
,我会在我的环境中遇到与您相同的问题,如下图所示。
所以请尝试删除 connectTimeout
属性 并使用默认值,或者设置一个比默认值更长的超时值。
我的具体问题是由于仅在 Azure App Service 中设置 'custom domain' blade 的 IP 而不是转到 'Properties' 并将多个 IP 地址复制到缓存配置.
一旦我将所有正确的 IP 列入白名单,一切正常。
不过,由于将小连接超时配置设置为 1000 毫秒而不是标准的 10000 毫秒,我偶尔会遇到超时。
我有一个正在测试的 Azure Redis 缓存。除了我现在正在尝试做的事情之外,used/nothing 并没有连接到它。它是最基本的 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());
我试图在我的环境中重现你的问题,然后我发现它似乎是由于 connectTimeout
值太短并且比 [=11= 的默认值 10000
短] 在 export const DEFAULT_REDIS_OPTIONS: IRedisOptions
中定义如下。
export const DEFAULT_REDIS_OPTIONS: IRedisOptions = {
// Connection
port: 6379,
host: "localhost",
family: 4,
connectTimeout: 10000,
//.....
}
如果我将 connectTimeout
值设置为 1000
甚至 100
,我会在我的环境中遇到与您相同的问题,如下图所示。
所以请尝试删除 connectTimeout
属性 并使用默认值,或者设置一个比默认值更长的超时值。
我的具体问题是由于仅在 Azure App Service 中设置 'custom domain' blade 的 IP 而不是转到 'Properties' 并将多个 IP 地址复制到缓存配置.
一旦我将所有正确的 IP 列入白名单,一切正常。
不过,由于将小连接超时配置设置为 1000 毫秒而不是标准的 10000 毫秒,我偶尔会遇到超时。