我有一個用例,我有一個帶有lambda函式的Amazon SQS fifo queue。我需要確保fifo只有在前一個lambda執行完成后才會觸發lambda(同時事件是按順序來的)。在aws檔案中,fifo支持精確的一次處理,但它并沒有提到在第一條訊息被完全處理之前,它不會向lambda推送更多的事件。
我需要確保只有在lambda函式完全處理完前一條訊息后才會處理下一條訊息。
是否有辦法確保只有當訊息1被lambda完全處理后,訊息2才會被lambda處理?
uj5u.com熱心網友回復:
其實要做到這一點是很容易的。它沒有被澄清,因為它默認會簡單地用完可用的賬戶并發量,并盡可能多地并行處理訊息。
您可以通過將lambda 函式的保留并發量設定為 1 來影響這一點。這將確保不會有超過 1 個 lambda 函式同時被執行。
uj5u.com熱心網友回復:
fifo支持精確的一次處理,但它并沒有在任何地方提到 在第一條訊息完全處理之前,它不會在lambda上推送更多的事件。 完全處理完畢。
SQS從未向任何地方推送過任何東西。你必須輪詢SQS的訊息。當你配置Lambda與SQS集成時,Lambda實際上是在幕后運行一個行程,為你輪詢SQS。
AWS FIFO佇列允許您通過指定訊息組ID來強制訊息按順序被處理。當您為多條訊息指定相同的訊息組ID時,那么FIFO佇列每次只提供其中一條訊息(以先入先出的方式)的順序。只有在第一條訊息從佇列中移除后,第二條訊息才會被提供,等等。
除此之外,您應該將 AWS Lambda SQS 集成配置為 Batch Size 的 1,這樣它就不會嘗試在處理前等待多個訊息可用。而且你可以將 Lambda 函式上的 Reserved Concurrency 配置為 1,正如另一個答案中提到的那樣,這樣每次只能運行一個 Lambda 函式的實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325335.html
標籤:
