2017-08-11 97 views
2

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

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

问题: 我希望我的lambda函数能够在一秒内执行和响应。我如何异步进行API调用,使得lambda函数可以在我的时间限制内完成所有这些操作,而无需等待来自API调用的响应?理想情况下,我想实现一个消防和忘记API调用系统,它可以毫不拖延地发送最终响应。

根据AWS拉姆达documentation,我不得不使用等待运营商,在拉姆达异步调用,以避免函数是完成了异步调用完成之前。

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

谢谢

回答

0

如果你只是想一场火灾而忘了,那就不要用await。只需使用HttpClient方法(get,put等)调用API,就完成了。这些方法会返回一个您不关心的Task<HttpResponseMessage>,因此您的Lambda可以在此时退出。

4

您无法在无服务器请求的“外部”运行代码。尝试这样做只会带来痛苦 - 因为你的无服务器主机不知道你的代码不完整,它可以随时终止你的主机进程。

适当的解决方案是让两个 lambda被一个队列分开。第一个(面向外部的)lambda采用POST请求,在队列中放置一条消息,并将其响应返回给调用者。

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

+0

还是先lambda函数可以直接调用第二,异步...异步调用立即返回。这看起来更清晰,因为Lambda函数目前无法监视队列。 –

+0

是的,除非有错误。在设计失败时,我宁愿至少执行一次工作项目。 –

+0

很难与此争论。 –

2

对于您的使用案例,使用AWS Step functions将提供完全托管的解决方案。步骤如下。

  1. 定义您的AWS step功能流程,具体取决于您是要并行触发还是依次触发它们。
  2. 将初始步骤与API网关POST方法集成。
  3. 开始Step功能状态机后,它会返回一个成功状态(立即无需等待结束状态)

有超过定制LAMBDA流实现步骤功能多少好处。

  • 如果单个步骤返回错误,您可以配置重试每个步骤。
  • 如果任何步骤最终出现错误,您可以触发回调。
  • 您可以直观地识别和监测哪一步有问题&等