1 回答

TA貢獻1848條經驗 獲得超6個贊
您可能希望將您的消息編碼為某種東西,因為 SQS 在 API 處不接受消息有效負載中所有可能的字節組合。僅支持有效的 UTF-8、制表符、換行符和回車符。
重要的
根據 W3C XML 規范,以下列表顯示了您的消息中允許的字符(Unicode)。如需更多信息,請訪問http://www.w3.org/TR/REC-xml/#charsets如果您發送列表中未包含的任何字符,您的請求將被拒絕。
#x9 | #xA | #xD | [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to #x10FFFF]
http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html
base64 字母表顯然落在這個范圍內,使得帶有 base64 編碼的消息不可能被視為無效而被拒絕。當然,它也會使您的負載膨脹,因為 base64 會將原始消息的每 3 個字節擴展為 4 個輸出字節(64 個符號將每個輸出字節限制為攜帶 6 位可用信息,3 x 8 → 4 x 6)。
大概 boto 會自動為您進行 base64 編碼和解碼消息,以便“有用”。
但是完全沒有理由必須使用 base64。
想到的一個例子......有效的 JSON 也將符合 SQS 有效負載支持的受限字符范圍。(從理論上講,我想,JSON 可以被認為不是“編碼”,但這有點迂腐)。
除了您提出的粗略方法之外,沒有明確的方法可以確定一條消息是否需要多次解碼,但是可以提出這樣的論點,即如果您處于解碼需要不明確的情況下,那么應該被淘汰。
如果 boto 的行為沒有記錄在案,并且沒有辦法讓它表現得如此,我會說這是錯誤的行為。但是,事實上,我不得不松口氣,說這很不尋常。
- 1 回答
- 0 關注
- 229 瀏覽
添加回答
舉報