FIFOAmazon 中的隊列交付邏輯 SQS - Amazon Simple Queue Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

FIFOAmazon 中的隊列交付邏輯 SQS

下列概念可協助您進一步瞭解訊息傳送和接收來源的訊息FIFO。

傳送訊息

如果多個訊息連續傳送到FIFO佇列,每個訊息都有不同的重複資料刪除 ID,Amazon 會SQS儲存訊息並確認傳輸。接下來會按照訊息傳輸的正確順序來接收和處理每則訊息。

在FIFO佇列中,郵件會根據訊息群組識別碼排序。如果多個主機 (或同一主機上的不同執行緒) 將具有相同訊息群組 ID 的訊息傳送到FIFO佇列,Amazon 會按照訊息到達處理的順序SQS儲存訊息。為了確SQS保 Amazon 保留訊息傳送和接收的順序,每個生產者都應使用唯一的訊息群組 ID 來傳送其所有訊息。

FIFO佇列邏輯僅適用於每個訊息群組識別碼。每個訊息群組 ID 代表 Amazon SQS 佇列中不同排序的訊息群組。每個訊息群組 ID 的所有訊息均會嚴格按照順序傳送和接收。但若訊息群組 ID 的值不同,便可能不會按照順序來傳送和接收訊息。請務必在訊息群組 ID 與訊息之間建立關聯性。若未提供訊息群組 ID,該動作會失敗。如果您需要單一群組已排序的郵件,請為傳送至FIFO佇列的郵件提供相同的訊息群組識別碼。

接收訊息

您無法提出請求接收具有特定群組 ID 的訊息。

從具有多個訊息群組的FIFO佇列接收訊息時IDs,Amazon SQS 首先嘗試盡可能多地傳回具有相同訊息群組 ID 的訊息。如此可讓其他消費者來處理訊息群組 ID 不同的訊息。當您收到含有訊息群組 ID 的訊息時,除非您刪除該訊息或訊息變成可見,否則不會再傳回相同訊息群組 ID 的訊息。

注意

使用 MaxNumberOfMessages 動作的 ReceiveMessage 請求參數,即可透過一次呼叫接收多達 10 則訊息。這些訊息會保留其FIFO順序,而且可以具有相同的訊息群組識別碼。因此,如果有少於 10 則具有相同訊息群組識別碼的可用訊息,您可能會在同一批 10 則訊息中接收來自另一個訊息群組 ID 的郵件,但仍然會依FIFO序接收訊息。

多次重試

FIFO佇列允許生產者或取用者嘗試多次重試:

  • 如果生產者偵測到失敗的 SendMessage 動作,可以使用相同的重複資料刪除 ID,視需要多次重試傳送。假設生產者在重複資料刪除間隔到期之前至少收到一個確認,多次重試既不會影響訊息的排序,也不會引入重複項目。

  • 如果消費者偵測到失敗的 ReceiveMessage 動作,它可以視需要使用相同的接收要求嘗試 ID 重試多次。假設消費者在可見性逾時到期前至少收到一個確認,則多次重試不會影響訊息的排序。

  • 當您收到含有訊息群組 ID 的訊息時,除非您刪除該訊息或訊息變成可見,否則不會再傳回相同訊息群組 ID 的訊息。