无法使用boto3访问SQS消息属性

Val*_*iuk 10 amazon-sqs amazon-web-services boto3

我正在尝试传递然后将带有属性的消息检索到AWS SQS中.即使我可以通过管理控制台查看消息的属性,但我无法使用boto3获取它们,总是得到无.更改"AttributeNames"并没有什么不同.可以检索邮件正文.

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
Run Code Online (Sandbox Code Playgroud)

Mic*_*bot 12

属性(系统生成的)和消息属性(用户定义的)是后端API提供的两种不同类型的事物.

您正在寻找消息属性,但您要求代码获取属性.

AttributeNames=['All']`
Run Code Online (Sandbox Code Playgroud)

看起来你需要获取消息属性......

MessageAttributeNames=['All']
Run Code Online (Sandbox Code Playgroud)

打电话时... queue.receive_messages().或者,如果已知,您可以使用您想要的特定消息属性名称来代替'All'(如果我设计了这个API - 会被调用'*',但我离题了).

不可否认,基于对底层API的熟悉程度,这只是一个直观的猜测,但它似乎与http://boto3.readthedocs.io/en/latest/guide/sqs.html一致.

  • 我讨厌 aws api 的又一个原因 (3认同)