【问题标题】:Aws Lambda call to external api after callback回调后对外部 api 的 Aws Lambda 调用
【发布时间】:2018-08-13 02:40:45
【问题描述】:

我有一个将 http 调用发送到 API 的 lambda 函数(比如说'A')。在收到'A' 的回复后,立即将内容返回给调用者,即在 10 秒内(callback(null, success))。然后将从 API 'A' 获取的数据保存到我的外部 API(假设是 'B')。

我尝试如下,但 Lambda 一直等到事件循环为空(它正在等待来自第二个 http 调用的响应)。

我不想将 eventLoopWaitEmpty 设置为 false,因为它会冻结 eventloop 并在下次调用时执行。

request.get({url: endpointUrlA}, 
  function (errorA, responseA, bodyA) {

     callback(null, "success");

    request.post({url: endpointUrlB,  
          body: bodyA,
          json: true}, function(errorB, responseB, bodyB){

         //Doesn't want to wait for this response
    });

/* Also tried the callback(null, "success"); here too

});

有人对我如何实现这个有任何想法吗?谢谢!

PS - Btw I read the Previous similar questions doesn't seems to clear with those.

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-sdk aws-api-gateway


    【解决方案1】:

    这似乎是将这个 lambda 分解为两个带有一些支持代码的 lambda 的好选择。

    1. 第一个 lambda 接收到对“A”的请求并将消息放置到 SQS。然后它将success 状态返回给调用者。
    2. 一个单独的进程监控 SQS 队列并在消息可用时对其调用第二个 Lambda。

    这有几个好处。

    首先,您不再有一个长时间运行的 lambda 等待可能停机的第二个系统返回。 其次,您在后台异步执行操作。

    查看this blog post,了解其在实践中的工作原理。

    【讨论】:

    • 我可以使用invocationType: Event异步调用另一个lambda函数在后台执行相同的过程怎么样。我想知道这是否是一种有效的方法。任何想法都会很有帮助
    猜你喜欢
    • 2022-10-23
    • 1970-01-01
    • 2020-11-21
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多