繁体   English   中英

尝试从 App Runner 连接到 AWS ElasticCache Redis 时出现 RedisTimeoutException

[英]RedisTimeoutException when trying to connect to AWS ElasticCache Redis from App Runner

所以我们有一个连接到 AWS ElasticCache 的 C# Web API 项目。 它是一个只有一个节点要测试的 Redis 集群。

我的连接字符串如下所示:

{NODE-ENDPOINT}:6379,ssl=True,sslProtocols=tls12,abortConnect=false,syncTimeout=10000

尝试将集群端点作为集群中单个节点的端点。 都失败了。

在本地它可以工作,但是当我们构建容器并在 AWS 的 App Runner 上运行它时,它会收到以下错误消息:

StackExchange.Redis.RedisTimeoutException: The timeout was reached before the message could be written to the output buffer, and it was not sent, command=SETEX, timeout: 50000, inst: 0, qu: 0, qs: 0, aw: False, bw: CheckingForTimeout, rs: NotStarted, ws: Idle, in: 0, last-in: 0, cur-in: 0, sync-ops: 0, async-ops: 1, serverEndpoint: {NODE-ENDPOINT}:6379, conn-sec: n/a, mc: 1/1/0, mgr: 10 of 10 available, clientName: ip-10-0-170-16(SE.Redis-v2.6.86.49666), IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=3,Free=32764,Min=2,Max=32767), POOL: (Threads=5,QueuedItems=0,CompletedItems=534), v: 2.6.86.49666 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)

使用 Reachability Analyzer 检查接口是否可以连接到端口 6379。状态为“Reachable”,因此排除了 AWS 端的网络问题。 也因为“在将消息写入输出缓冲区之前达到超时”部分,我不确定这是连接问题还是 C#/容器上的问题。 我用来连接的代码。 首先,我将其注册到 IOC 容器中;

var multiplexer = ConnectionMultiplexer.Connect(builder.Configuration.GetConnectionString("Redis"));
builder.Services.AddSingleton<IConnectionMultiplexer>(multiplexer);

然后从IOC中获取为_redis并使用下面的代码添加一个key

IDatabase db = _redis.GetDatabase();
RedisValue redisValue = new RedisValue("Test-Value");
TimeSpan ttl = TimeSpan.FromMinutes(10);
await db.StringSetAsync(new RedisKey(token), redisValue, ttl, false);

再次在我本地的本地 redis 上运行。 但是使用 AWS ElasticCache 我无法让它工作。

这是一个非常愚蠢的错误。 通过unable to connect to Redis cluster using stackexchange.redis的回答解决了这个问题

事实证明,我没有配置传输中加密。 所以我们应该在没有ssl的情况下连接到集群。 更改以下连接字符串解决了问题:

{NODE-ENDPOINT}:6379,ssl=False,abortConnect=false,syncTimeout=10000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM