aws api网关的长呼叫

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

我的问题如下。

我目前有一个在.NET中运行的系统。该系统呼叫服务大约需要1分钟。

我们目前正在将该解决方案迁移到AWS。我发现的问题是Lambda可以在1分钟内运行(因为它使调用另一个系统需要1分钟),并且一切正常。但是,当我从Gateway API进行调用时,您会感到不适。经过调查,我发现最大超时时间为29秒。

然后,考虑到我需要等待1分钟才能使用lambda函数,因此我需要知道该问题有什么解决方案。

我想到的是从API触发调用,然后运行lambda函数,然后从客户端创建一个池以查看事务的状态。但是我不知道如何将最初的调用保持在“内存中”,当我再次调用api来查看状态时,我知道我在谈论相同的请求,以获取结果数据

amazon-web-services api lambda timeout gateway
1个回答
0
投票

这里是解决此问题的一种方法的概述:

  • 客户端发出触发Lambda#1的/start API请求
  • Lambda#1是短暂的,并且执行以下操作:
    • 生成UUID作为要执行的任务的相关器
    • 以UUID为键在DynamoDB中创建一个新项目
    • 触发持续时间(1分钟)的Lambda#2启动,并将其传递给UUID
    • 将UUID返回给客户端
  • Lambda#2是长期存在的,它会执行以下操作:
    • 无论需要做什么工作
    • 定期将其状态和结果更新为DynamoDB中的UUID项
  • 客户端可以按自己喜欢的时间表轮询/status?id=UUID API,从而触发Lambda#3
  • Lambda#3是短暂的,并且执行以下操作:
    • 从DynamoDB查询UUID项目
    • 将当前状态和所有结果返回给客户端

[当/status?id=UUID API调用指示长期任务已完成(或失败)时,客户端可以发出最终的API请求,以表明它具有与UUID相关联的结果,并且可以删除DynamoDB项,或者您可以仅在DynamoDB项上实现TTL。

此过程看起来很复杂,但实际上并非如此。

而不是客户端轮询后端的状态和结果,它可以替代地轮询SQS队列中的相同对象或订阅SNS主题。


0
投票

以下是解决此问题的一种方法的概述:

  • 客户端发出触发Lambda#1的/start API请求>
  • Lambda#1是短暂的,并且执行以下操作:
    • 生成UUID作为要执行的任务的相关器
    • 以UUID为键在DynamoDB中创建一个新项目
    • 触发持续时间(1分钟)的Lambda#2启动,并将其传递给UUID
    • 将UUID返回给客户端
  • Lambda#2是长期存在的,它会执行以下操作:
    • 需要做什么工作
    • 定期将其状态和结果更新为DynamoDB中的UUID项
  • 客户端可以按自己喜欢的时间表轮询/status?id=UUID API,从而触发Lambda#3
  • Lambda#3是短暂的,并且执行以下操作:
    • 从DynamoDB查询UUID项
    • 将当前状态和所有结果返回给客户端
  • [当/status?id=UUID API调用指示长期任务已完成(或失败)时,客户端可以发出最终的API请求,以表明它具有与UUID相关联的结果,并且可以删除DynamoDB项,或者您可以仅在DynamoDB项上实现TTL。

    此过程看起来很复杂,但实际上并非如此。

    而不是客户端轮询后端的状态和结果,它可以交替轮询SQS队列中的相同对象或订阅SNS主题。

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