Amazon SQS 的訊息中繼資料 - Amazon Simple Queue Service

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

Amazon SQS 的訊息中繼資料

您可以使用訊息屬性,將應用程式的自訂中繼資料連接到 Amazon SQS 訊息。您可以使用訊息系統屬性,存放像是 AWS X-Ray等其他 AWS 服務的中繼資料。

Amazon SQS 訊息屬性

Amazon SQS 可讓您在使用息屬性的訊息中包含結構化中繼資料 (例如時間戳記、地理空間資料、簽名和識別碼)。每則訊息最多可以擁有 10 個屬性。訊息屬性為選用且與訊息內文分開 (但與訊息內文一起傳送)。您的消費者可以使用訊息屬性以特定方式處理訊息,而不必先處理訊息內文。如需使用 Amazon SQS 主控台傳送具有屬性之訊息的相關資訊,請參閱傳送具有屬性的訊息

注意

請勿將訊息屬性與訊息系統屬性混淆:您可以使用訊息屬性將自訂中繼資料附加至應用程式的 Amazon SQS 訊息,但您可以使用訊息系統屬性來儲存其他 AWS 服務的中繼資料,例如。 AWS X-Ray

訊息屬性元件

重要

訊息屬性的所有元件都包含在 256 KB 的訊息大小限制內。

NameTypeValue 和訊息內文不能為空或 null。

每項訊息屬性均是由以下元件組成:

  • 名稱 – 訊息屬性名稱可包含以下字元:A-Za-z0-9、底線 (_)、連字號 (-) 和句點 (.)。將適用以下限制:

    • 長度上限為 256 個字元

    • 開頭不能是 AWS.Amazon. (或任何大小寫變化)

    • 區分大小寫

    • 在訊息的所有屬性名稱中必須是唯一的

    • 開頭或結尾不能是句號

    • 序列中不能有句號

  • 類型 – 訊息屬性資料類型。支援的類型包括 StringNumberBinary。您也可以新增任何資料類型的自訂資訊。資料類型與訊息SendMessage內文具有相同的限制 (如需詳細資訊,請參閱 Amazon 簡單佇列服務 API 參考中的)。此外,適用下列限制:

    • 長度上限為 256 個字元

    • 區分大小寫

  • – 訊息屬性值。若為 String 資料類型,屬性值的限制與訊息內文相同。

訊息屬性資料類型

訊息屬性資料類型指定 Amazon SQS 如何處理對應的訊息屬性值。例如,如果類型是 Number,Amazon SQS 會驗證數值。

Amazon SQS 支援邏輯資料類型 StringNumberBinary,搭配格式為 .custom-data-type 的選用自訂類型標籤

  • 字串String 屬性可以使用任何有效的 XML 字元儲存 Unicode 文字。

  • 數字 - Number 屬性可以存放正或負的數值。數字的精準度最多可達 38 位數,可介於 10^-128 至 10^+126 之間。

    注意

    Amazon SQS 會移除前置和結尾的零。

  • 二進位 – 二進位屬性可儲存任何二進位資料,例如壓縮資料、加密資料或影像。

  • 自訂 – 若要建立自訂資料類型,請將自訂類型標籤附加到任何資料類型。例如:

    • Number.byteNumber.shortNumber.intNumber.float 可協助區分數字類型。

    • Binary.gifBinary.png 可協助區分檔案類型。

    注意

    Amazon SQS 不會解譯、驗證或使用附加的資料。

    自訂類型標籤的限制與訊息內文相同。

計算訊息屬性的 MD5 訊息摘要

如果您使用 AWS SDK for Java,則可以略過本節。適用於 Java 的開發套件的 MessageMD5ChecksumHandler 類別支援 Amazon SQS 訊息屬性的 MD5 訊息摘要。

如果您使用查詢 API 或其中一個不支援 Amazon SQS 訊息屬性之 MD5 訊息摘要的 AWS 開發套件,則必須使用下列準則來執行 MD5 訊息摘要計算。

注意

一律在 MD5 訊息摘要計算中包含自訂資料類型尾碼。

概觀

以下概述 MD5 訊息摘要計算演算法:

  1. 以遞增順序根據名稱排列所有訊息屬性。

  2. 將各屬性 (NameTypeValue) 的個別部分編碼至緩衝區。

  3. 運算整個緩衝區的訊息摘要。

下圖顯示的是單一訊息屬性的 MD5 訊息摘要編碼:

單一訊息屬性的 MD5 訊息摘要的編碼。

若要對單個 Amazon SQS 訊息屬性進行編碼

  1. 編碼名稱:長度 (4 個位元組) 和名稱的 UTF-8 位元組。

  2. 編碼資料類型:長度 (4 個位元組) 和資料類型的 UTF-8 位元組。

  3. 編碼值的傳輸類型 (StringBinary) (1 個位元組)。

    注意

    StringNumber 的邏輯資料類型使用 String 傳輸類型。

    Binary 邏輯資料類型使用 Binary 傳輸類型。

    1. 若為 String 傳輸類型,為編碼 1。

    2. 若為 Binary 傳輸類型,為編碼 2。

  4. 為屬性值編碼。

    1. 若為 String 傳輸類型,請編碼屬性值:長度 (4 個位元組) 和值的 UTF-8 位元組。

    2. 若為 Binary 傳輸類型,請編碼屬性值:長度 (4 個位元組) 和值的原始位元組。

Amazon SQS 訊息系統屬性

雖然您可以使用訊息屬性將應用程式的自訂中繼資料連接到 Amazon SQS 訊息,但您仍可以使用訊息系統屬性來存放 AWS X-Ray等其他 AWS 服務的中繼資料。如需詳細資訊,MessageSystemAttribute請參閱SendMessageSendMessageBatch API 動作的請求參數、ReceiveMessage API 動作的AWSTraceHeader屬性以及 Amazon 簡單佇列服務 API 參考中的資MessageSystemAttributeValue料類型。

訊息系統屬性的結構與訊息屬性完全相同,但下列屬性除外::

  • 目前,唯一支援的訊息系統屬性是 AWSTraceHeader。其類型必須是,String且其值必須是格式正確的 AWS X-Ray 追蹤標頭字串。

  • 訊息系統屬性的大小不會計入訊息的總大小。