本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 的訊息。
-