Simple Message Queue (SMQ) クライアントには、メッセージを Base64 エンコードするオプションが用意されています。このトピックでは、さまざまな生成および消費シナリオで Base64 エンコードを使用するタイミングについて説明します。
背景情報
Base64 エンコードは、バイナリデータを ASCII 文字列に変換するために使用されます。テキスト処理が必要な環境でデータを転送するために広く使用されています。
Base64 エンコードを使用する利点
互換性: Base64 エンコードされた文字列は、印刷可能な ASCII 文字で構成されており、電子メール、JSON、XML などのテキスト形式での転送に適しています。これにより、バイナリデータで発生する可能性のある文字化けを防ぎます。
セキュリティ: Base64 エンコードは暗号化方式ではありませんが、生のバイナリデータを見えにくくし、一部の純粋なテキスト形式で直接表示できないようにします。これにより、データセキュリティがある程度向上します。
シンプルさ: Base64 のエンコードとデコードは比較的簡単なプロセスです。多くのプログラミング言語とライブラリが Base64 エンコードをサポートしています。
Base64 エンコードを使用する欠点
データサイズが大きい: Base64 エンコードでは、データサイズが約 33% 増加します。大きなバイナリファイルを Base64 エンコードすると、エンコードされたファイルのサイズは元のファイルのサイズよりも大きくなります。
効率が低い: デコードには、特に大量のデータを処理する必要がある場合、追加のコンピューティングリソースが必要です。これにより、パフォーマンスのオーバーヘッドが大幅に増加する可能性があります。
可読性が低い: エンコードされたメッセージ本文は人間が読める形式ではありません。
推奨事項
キューベースのメッセージングモデル
メッセージ本文に特殊文字が含まれていない場合は、Base64 エンコードを使用しないことをお勧めします。
メッセージを送信するには、
message.setMessageBodyAsRawStringメソッドを使用してメッセージ本文を設定します。 // メッセージ本文を設定しますメッセージを受信するには、
message.getMessageBodyAsRawStringメソッドを使用してメッセージ本文を取得します。 // メッセージ本文を取得します
トピックベースのメッセージングモデル (サブスクリプションタイプ: キューまたは HTTP)
トピックベースのメッセージングモデルでは、NotifyContentFormat パラメーターは、サブスクライバーに配信されるメッセージ形式を指定します。SIMPLIFIED、JSON、XML の 3 つのメッセージ形式がサポートされています。詳細については、「サブスクリプション」トピックの「メッセージ形式」セクションをご参照ください。
SIMPLIFIED: メッセージ本文に特殊文字が含まれていない場合は、Base64 エンコードを使用しないことをお勧めします。
トピックにメッセージを送信するには、
RawTopicMessageメソッドを使用してメッセージオブジェクトを初期化します。 // メッセージオブジェクトを初期化しますキューからメッセージを消費するには、
message.getMessageBodyAsRawString()メソッドを使用してメッセージ本文を取得します。 // メッセージ本文を取得します
JSON または XML: JSON や XML などのテキスト形式で文字列が転送される場合は、Base64 エンコードを使用することをお勧めします。
トピックにメッセージを送信するには、TopicMessage メソッドを使用してメッセージオブジェクトを初期化します。この場合、メッセージ本文は Base64 エンコードされ、転送のために Message フィールドに格納されます。
キューからメッセージを消費するには、
message.getMessageBodyAsRawString();メソッドを使用して Message フィールドの値を取得し、Base64 デコードを実行します。 // Message フィールドの値を取得し、Base64 デコードを実行しますJSONObject object = new JSONObject(message.getMessageBodyAsRawString()); String jsonMessageData = String.valueOf(object.get("Message")); String messageBody = new String(Base64.decodeBase64(jsonMessageData)); // Base64 デコードを実行します
トピックベースのメッセージングモデル (サブスクリプションタイプ: ダイレクトメール)
メッセージ本文に特殊文字が含まれていない場合は、Base64 エンコードを使用しないことをお勧めします。
メッセージを送信するには、
message.setMessageBodyAsRawStringメソッドを使用してメッセージ本文を設定します。 // メッセージ本文を設定しますメッセージを受信するには、
message.getMessageBodyAsRawStringメソッドを使用してメッセージ本文を取得します。 // メッセージ本文を取得します
トピックベースのメッセージングモデル (サブスクリプションタイプ: SMS)
メッセージ本文に特殊文字が含まれていない場合は、Base64 エンコードを使用しないことをお勧めします。
メッセージを送信するには、
message.setMessageBodyAsRawStringメソッドを使用してメッセージ本文を設定します。 // メッセージ本文を設定しますメッセージを受信するには、
message.getMessageBodyAsRawStringメソッドを使用してメッセージ本文を取得します。 // メッセージ本文を取得します
トピックベースのメッセージングモデル (サブスクリプションタイプ: モバイルプッシュ)
メッセージ本文に特殊文字が含まれていない場合は、Base64 エンコードを使用しないことをお勧めします。
メッセージを送信するには、
message.setMessageBodyAsRawStringメソッドを使用してメッセージ本文を設定します。 // メッセージ本文を設定しますメッセージを受信するには、
message.getMessageBodyAsRawStringメソッドを使用してメッセージ本文を取得します。 // メッセージ本文を取得します