2017-08-11 133 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流實現步驟功能多少好處。

  • 如果單個步驟返回錯誤,您可以配置重試每個步驟。
  • 如果任何步驟最終出現錯誤,您可以觸發回調。
  • 您可以直觀地識別和監測哪一步有問題&等