2016-12-01 29 views
3

AWS SQSに属性を含むメッセージを渡して取得しようとしています。 管理コンソールからメッセージの属性を見ることはできますが、boto3を使用して取得することはできません。常にNoneを取得します。 "AttributeNames"を変更しても違いはありません。メッセージ本文を取得できます。OK。boto3を使用してSQSメッセージ属性にアクセスできない

import boto3 
sqs = boto3.resource('sqs', region_name = "us-west-2") 
queue = sqs.get_queue_by_name(QueueName='test') 

queue.send_message(MessageBody = "LastEvaluatedKey", 
        MessageAttributes ={ 
          'class_number':{ 
              "StringValue":"Value value ", 
              "DataType":"String" 
              } 
             } 
        ) 
messages = queue.receive_messages(
            MaxNumberOfMessages=1, 
            AttributeNames=['All'] 
            ) 
for msg in messages: 
    print(msg.message_attributes) # returns None 
    print(msg.body) # returns correct value 

答えて

5

(生成系)属性とメッセージ属性(ユーザが定義)back-end APIによって提供されるものの2種類です。

あなたはメッセージ属性を探していますが、属性をフェッチするようにコードに要求しています。

AttributeNames=['All']` 

あなたはメッセージ属性をフェッチする必要があるように思える...

MessageAttributeNames=['All'] 

... queue.receive_messages()を呼び出します。または、特定のメッセージ属性名がわかっている場合は、'All'(このAPIを設計していたのですが、'*'と呼ばれていましたが、私はそれを無視します)の代わりに使用できます。

確かに、これは基になるAPIに精通している私のところでは直感的な推測に過ぎませんが、それはhttp://boto3.readthedocs.io/en/latest/guide/sqs.htmlと一貫しているようです。

+1

これはうまくいきましたね))ありがとう –

関連する問題