2016-12-01 43 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提供的东西。

您正在查找消息属性,但您要求代码提取属性。

AttributeNames=['All']` 

好像你必须获取消息属性...

MessageAttributeNames=['All'] 

...叫queue.receive_messages()时。或者,可以使用您想要的特定消息属性名称(如果已知),而不是使用'All'(我设计了此API - 本来称为'*',但我离题了)。

不可否认,这只是基于对基础API的熟悉而形成的一种直觉猜测,但它似乎与http://boto3.readthedocs.io/en/latest/guide/sqs.html一致。

+1

它的工作,你猜对了))谢谢 –