全部產品
Search
文件中心

Simple Message Queue (formerly MNS):訊息體編碼選擇指南

更新時間:Sep 14, 2024

輕量訊息佇列(原 MNS)用戶端內建了Base64編碼與不使用Base64編碼兩種選項,本文介紹在不同的生產消費情境中是否需要使用Base64編碼。

背景知識

Base64編碼是一種用於將位元據轉換為ASCII字串的編碼方案,廣泛應用於需要通過文本處理的環境中傳輸資料。

使用Base64編碼的優點

  • 相容性:Base64編碼的字串由可列印的ASCII字元組成,適合在電子郵件、JSON、XML等文字格式設定中傳輸,避免了位元據導致的亂碼問題。

  • 安全性:雖然Base64並非加密手段,但它可以防止一些純文字格式中對原始位元據的直接查看,增加了一定程度的安全性。

  • 簡單性:編碼和解碼過程相對簡單,許多程式設計語言和庫都提供了對Base64編碼的內建支援。

使用Base64編碼的缺點

  • 資料膨脹:Base64編碼會使資料體積膨脹約33%。這意味著如果您對大型二進位檔案進行編碼,最終得到的字串會比原始檔案大。

  • 效率降低:在解碼時需要額外的計算資源,尤其是在處理大量資料時,效能開銷可能比較顯著。

  • 可讀性低:訊息體內容被編碼後無法直接閱讀查看。

使用建議

隊列模型

當訊息體無特殊字元時,建議您不使用Base64編碼。

  • 發送訊息時使用message.setMessageBodyAsRawString方法設定訊息體。

  • 接收訊息時使用meesage.getMessageBodyAsRawString方法擷取訊息體。

主題模型(隊列/HTTP訂閱者式

在主題模型中,訊息格式指訂閱的NotifyContentFormat屬性,指推送給使用者的訊息格式,可選擇SIMPLIFIED、JSON或XML三種格式,更多資訊,請參見訂閱格式

  • 訂閱格式為SIMPLIFIED:訊息體無特殊字元的情況下,建議不使用Base64編碼。

    • 向主題發送訊息時使用RawTopicMessage初始化訊息對象。

    • 從隊列消費訊息時使用message.getMessageBodyAsRawString()擷取訊息體。

  • 訂閱格式為JSON或XML:Base64編碼的字串適合在JSON、XML等文字格式設定中傳輸,建議使用Base64編碼。

    • 向主題發送訊息時使用TopicMessage初始化訊息對象,此時訊息體會被Base64編碼後放在Message欄位中傳輸。

    • 從隊列消費訊息時使用message.getMessageBodyAsRawString();擷取Message欄位值後使用Base64解碼。

      JSONObject object = new JSONObject(message.getMessageBodyAsRawString());
      String jsonMessageData = String.valueOf(object.get("Message"));
      String messageBody = new String(Base64.decodeBase64(jsonMessageData));

主題模型(郵件訂閱者式)

當訊息體無特殊字元時,建議您不使用Base64編碼。

  • 發送訊息時使用message.setMessageBodyAsRawString方法設定訊息體。

  • 接收訊息時使用meesage.getMessageBodyAsRawString方法擷取訊息體。

主題模型(簡訊訂閱者式)

當訊息體無特殊字元時,建議您不使用Base64編碼。

  • 發送訊息時使用message.setMessageBodyAsRawString方法設定訊息體。

  • 接收訊息時使用meesage.getMessageBodyAsRawString方法擷取訊息體。

主題模型(Alibaba Cloud Mobile Push訂閱者式)

當訊息體無特殊字元時,建議您不使用Base64編碼。

  • 發送訊息時使用message.setMessageBodyAsRawString方法設定訊息體。

  • 接收訊息時使用meesage.getMessageBodyAsRawString方法擷取訊息體。