輕量訊息佇列(原 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
方法擷取訊息體。