AspNetCore 3.1 Web API serverless - 如何管理懒惰连接初始化?

问题描述 投票:0回答:1

我正在构建AspNetCore 3.1 Web API无服务器lambda应用程序。

我被告知,连接(例如:Redis连接)的初始化应在函数处理程序之外完成。这是为了更好地利用连接池。

Azure 团队也提出了同样的建议。https:/docs.microsoft.comen-usazureazure-cache-for-rediscache-dotnet-core-quickstart。

我很期待在使用Amazon.Lambda.AspNetCoreServer时,我们如何实现它。

https:/github.comawsaws-lambda-dotnettreemasterLibrariessrcAmazon.Lambda.AspNetCoreServer#bootstrapping-application-iwebhostbuilder-vs-ihostbuilder。

响应或任何其他指针来解决这个问题是非常感激的。

amazon-web-services asp.net-core .net-core aws-lambda
1个回答
1
投票

所以作为一个例子。

namespace blankCsharp
{
  public class Function
  {
    private static RedisClient redisClient; <<

    static Function() {
      initialize();
    }

    static async void initialize() {
      AWSSDKHandler.RegisterXRayForAllServices();
      redisClient = new RedisClient('1.2.3.4', 6379, 'username', 'password'); << initialised and reusable between invocations.
      await callLambda();
    }

    public async Task<AccountUsage> FunctionHandler(SQSEvent invocationEvent, ILambdaContext context)
    {
      return redisClient.get('dhddhdhdud')
    }
  }
}

我相信这就是你要实现的目标。通过在initialize部分的设置,只要不是冷启动,它应该能够保持调用之间的连接。

你应该记住,默认情况下Lambda会穿越互联网,所以你的Redis KV存储需要公开托管。

如果你想私下运行,你需要考虑将Lambda迁移到一个私有子网中,方法是 将其连接到VPC上.

© www.soinside.com 2019 - 2024. All rights reserved.