本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
FIFO 主題的訊息排序詳細資料
Amazon SNS FIFO 主題一律會依訊息發布到主題的確切順序,將訊息傳送到訂閱的 Amazon SQS 佇列,並僅傳送一次。訂閱 Amazon SQS FIFO 佇列後,佇列的取用者會以訊息傳送到佇列接收訊息的確切順序,且不會重複。不過,如果訂閱了 Amazon SQS 標準佇列,佇列的取用者可能會接收非按順序排列的訊息,而且會接收不止一次。如此可進一步使發布者和訂閱用戶解耦,讓訂閱用戶在訊息消耗和成本最佳化方面具有更大的彈性,如下圖所示,根據 FIFO 主題範例使用案例。
![在汽車零部件電子商務平台中進行嚴格排序的訊息傳遞。](images/sns-fifo-ordering-1.png)
請注意,訂閱者沒有隱含的順序。此如下列範例所示:m1 首先交付給批發訂閱用戶,然後交付給零售訂閱用戶,接著是分析訂閱用戶。訊息 m2 首先傳遞給零售訂閱用戶,然後傳遞給批發訂閱用戶,最後傳遞給分析訂閱用戶。雖然這兩個訊息以不同的順序傳遞給訂閱用戶,但訊息順序會保留每個 Amazon SQS FIFO 訂閱用戶。每個訂閱者與任何其他訂閱者彼此獨立。
![嚴格排序的訊息傳遞給每個訂閱者。](images/sns-fifo-ordering-2.png)
如果 Amazon SQS 佇列訂閱用戶無法連線,則可能會不同步。例如,假設批發應用程式佇列擁有者錯誤地改變了Amazon SQS 佇列政策,以防止 Amazon SNS 服務主體將訊息傳遞到佇列。在這種情況下,傳遞到批發佇列的價格更新失敗,而零售和分析佇列的傳遞成功,導致訂閱用戶不同步。當批發應用程式佇列擁有者更正其佇列政策時,Amazon SNS 會繼續將訊息傳送到訂閱佇列。任何在目標佇列設定不正確時發布至主題的訊息都會被捨棄,除非對應的訂閱具有已設定的無效字母佇列。
![批發佇列訂閱者變得暫時無法連線。](images/sns-fifo-ordering-3.png)
您可以讓多個應用程式 (或同一應用程式中的多個執行緒) 並行將訊息發佈至 SNS FIFO 主題。當您執行這項操作時,您可以有效率地將訊息順序委派給 Amazon SNS 服務。若要判斷已建立的訊息順序,您可以檢查序號。
序號是 Amazon SNS 指派給每封訊息之大型、不連續的數字。序號的長度是 128 位元,而且會在每個訊息群組繼續增加。序號會傳遞至訂閱的 Amazon SQS 佇列,做為訊息內文的一部分。但是,如果您啟用原始訊息交付,則傳遞至 Amazon SQS 佇列的訊息不包含序號或任何其他 Amazon SNS 訊息中繼資料。
![Amazon SNS 會為每個訊息指派唯一的序列號,並將序列號傳遞給 Amazon SQS。](images/sns-fifo-ordering-4.png)
Amazon SNS FIFO 主題定義訊息群組內容中的排序。如需更多詳細資訊,請參閱 FIFO 主題的訊息群組。