amazon-web-services - 无法使用 boto3 访问 SQS 消息属性

标签 amazon-web-services amazon-sqs boto3

我正在尝试将带有属性的消息传递到 AWS SQS,然后检索该消息。 尽管我可以通过管理控制台查看消息的属性,但我无法使用 boto3 获取它们,总是获取 None。更改“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

最佳答案

属性(系统生成)和消息属性(用户定义)是back-end API提供的两种不同类型的东西。 。

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

AttributeNames=['All']`

看来您需要获取消息属性...

MessageAttributeNames=['All']

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

诚然,这只是我基于对底层API熟悉程度的直观猜测,但似乎与 http://boto3.readthedocs.io/en/latest/guide/sqs.html 一致。 .

关于amazon-web-services - 无法使用 boto3 访问 SQS 消息属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40901658/

相关文章:

r - 在 AWS 上使用 Rserve 在 Node.js 和 R 之间进行跨平台通信时出错。错误:connect ETIMEDOUT

swift - 即使对象存在,DynamoDB 查询每次都返回 nil

postgresql - Airflow CeleryExecutor 与 AWS SQS

python - AWS SNS-如何检索confirm_subscription的 token

Python boto3 过滤RDS标签

python - 如何使用 Amazon SNS 和 Python 和 boto3 发送带有自定义发件人 ID 的 SMS

amazon-web-services - AWS 参数必须具有值错误(值存在)

ruby - 从亚马逊 URL 获取 ASIN 编号

amazon-web-services - S3 通知 SQS 是否可能失败?

python - 从 S3 读取 KMS 加密文件