当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda c#异步API调用

琴镜
2023-03-14

我有一个用c#编写的AWS lambda函数。此函数负责调用5-6个API调用(Post请求)。

  1. 所有这些API调用都是相互独立的。
  2. 我不关心这些API调用的响应。
  3. 即使我不关心后续响应,每个API调用也需要大约5秒才能完成。

问题:我希望lambda函数在一秒钟内执行并响应。如何异步进行API调用,使lambda函数能够在我的时间限制内完成所有这些操作,而不必等待API调用的响应?理想情况下,我想实现一个fire-and-forget-API调用系统,该系统可以毫不延迟地返回最终响应。

根据AWS lambda文档,我必须在lambda中对异步调用使用wait操作符,以避免在异步调用完成之前完成函数。

我错过什么了吗?还是有办法做到这一点?

谢啦

共有3个答案

安经纶
2023-03-14

如果你只是想要一堆火,然后忘记,那么不要用等待。只需使用HttpClient方法(get、put等)调用API,就可以了。这些方法返回一个任务

公冶经纶
2023-03-14

对于您的用例,使用AWS步骤函数将提供一个完全管理的解决方案。步骤如下。

  1. 定义AWS步骤函数流,基于是要并行触发还是逐个触发
  2. 将初始步骤与API网关POST方法集成
  3. 启动步骤功能状态机后,它将返回成功状态(立即不等待结束状态)

与自定义Lambda流实现相比,步骤函数没有什么好处。

  • 如果单个步骤返回错误,可以配置为重试每个步骤
  • 如果其中任何一个步骤最终出错,您可以触发回调
  • 您可以直观地识别和监视哪个步骤有问题
赖翰
2023-03-14

您不能在无服务器请求的“外部”运行代码。尝试这样做只会带来痛苦——因为您的无服务器主机不知道您的代码不完整,所以可以随意终止您的托管过程。

正确的解决方案是使用队列分隔两个lambda。第一个(面向外部的)lambda接受POST请求,在队列上丢弃消息,并将其响应返回给调用者。

第二个(仅限内部)lambda监视队列并执行API调用。

 类似资料:
  • 我正在调用一个外部API,这是缓慢的。目前,如果我已经调用API获取一些订单一段时间,调用可以分成页面(分页)。 因此,获取订单可能是进行多个调用,而不是1个调用。有时,每次呼叫可能是10秒左右,所以总共可能是一分钟左右,这太长了。 null 如果有人能给我指明正确的方向--那将不胜感激。

  • 本文向大家介绍JavaScript 异步调用,包括了JavaScript 异步调用的使用技巧和注意事项,需要的朋友参考一下 问题 可修改下面的 aa() 函数,目的是在一抄后用 console.log() 输出 want-value 但是,有额外要求: aa() 函数可以随意修改,但是不能有 console.log() 执行 console.log() 语句里不能有 setTimeout 包裹 解

  • Provider端异步执行将阻塞的业务从Dubbo内部线程池切换到业务自定义线程,避免Dubbo线程池的过度占用,有助于避免不同服务间的互相影响。异步执行无益于节省资源或提升RPC响应性能,因为如果业务执行需要阻塞,则始终还是要有线程来负责执行。 注意:Provider端异步执行和Consumer端异步调用是相互独立的,你可以任意正交组合两端配置 Consumer同步 - Provider同步 C

  • 从v2.7.0开始,Dubbo的所有异步编程接口开始以CompletableFuture为基础 基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小。 使用CompletableFuture签名的接口 需要服务提供者事先定义CompletableFuture签名的服务,具体参见服务端异步执行接口定义: public interface Asyn

  • 我写了一个处理列表列表的Spring批处理作业。 Reader返回List of List。处理器处理每个ListItem并返回已处理的List。Writer将内容写入DB并从List of List中sftp。 我有一个从spring批处理程序调用异步REST api的用例。在ListenableFuture响应上,我实现了LitenableFutureCallback来处理成功和失败,这正如预

  • 以下是我尝试使用“可完成未来”类实现的用例 我有一个id列表,我想为每个id调用api 我想从api调用中获得响应,并将其保存在列表或映射中,以便进一步处理 我也不想等到得到所有api调用的响应。我想设定一个时间限制,并在那之前获取所有可用的数据 我尝试了以下代码,但它不能正常工作 您能指导我这个用例吗?我需要 1.超时设置为 2。异步数据处理 3.未知的项目数。 我正在使用Java 8。 谢谢。