すでにメッセージ属性を追加できる状態で、SQSでメッセージ本文を使用する目的は何ですか?
例を挙げましょう。新しいユーザーが登録されたときにメッセージをnew-user
キューにプッシュします。メッセージにuserId
の属性があると想像しますが、body
here。
メッセージ属性は、メッセージ自体ではなく、メッセージメタデータ(タイムスタンプまたはおそらくカテゴリなど)として使用されることになっています。
理想的には、メッセージペイロードはメッセージ本文で指定する必要があります
したがって、たとえば、JSONおよびXMLペイロードをサポートしている場合は、ペイロードタイプをメッセージ属性として配置し、メッセージをフェッチするときに、このペイロードタイプ属性に基づいて、JSONメッセージプロセッサまたはXMLメッセージプロセッサのどちらかを決定できます。これは、属性と本文の使用法を説明するための単なる表面的な例です
以下はAWS Docからの抜粋です
Amazon SQSは、メッセージ属性のサポートを提供します。メッセージ属性を使用すると、メッセージに関する構造化されたメタデータアイテム(タイムスタンプ、地理空間データ、署名、識別子など)を提供できます。メッセージ属性はオプションであり、メッセージ本文とは別に送信されます。この情報は、メッセージの受信者が最初にメッセージ本文を処理せずにメッセージを処理する方法を決定するために使用できます。各メッセージは最大10個の属性を持つことができます。メッセージ属性を指定するには、AWSマネジメントコンソール、AWSソフトウェア開発キット(SDK)、またはクエリAPIを使用できます。
rabbitMQ
やKafka
などの従来のキュープロバイダーにマップする。
以下のように理解できます。
message_body=message_payload
message_attributes=message_headers ( can be used to apply different routing and filtering message using their headers information)
実際、aws sqsで使用されている用語よりもpayload
およびheaders
という用語の方が好まれます。
メッセージ属性は、メッセージペイロードの属性に似ています。