无法使用 boto3 访问 SQS 消息属性
Can't access SQS message attributes using boto3
我正在尝试将带有属性的消息传递到 AWS SQS,然后再将其检索。
尽管我可以通过管理控制台查看消息的属性,但我无法使用 boto3 获取它们,总是获取 None。更改 "AttributeNames" 没有任何区别。消息正文可以取回OK。
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
Attributes(系统生成)和Message Attributes(用户定义)是由[=15=提供的两种不同类型的东西].
您正在寻找消息属性,但您要求代码获取属性。
AttributeNames=['All']`
您似乎需要获取消息属性...
MessageAttributeNames=['All']
...调用 queue.receive_messages()
时。或者,您想要的特定消息属性名称(如果已知)可以用来代替 'All'
(如果我设计这个 API,它会被称为 '*'
,但是我跑题了)。
诚然,这只是我基于对底层API的熟悉程度的直觉猜测,但似乎与http://boto3.readthedocs.io/en/latest/guide/sqs.html一致。
我正在尝试将带有属性的消息传递到 AWS SQS,然后再将其检索。 尽管我可以通过管理控制台查看消息的属性,但我无法使用 boto3 获取它们,总是获取 None。更改 "AttributeNames" 没有任何区别。消息正文可以取回OK。
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
Attributes(系统生成)和Message Attributes(用户定义)是由[=15=提供的两种不同类型的东西].
您正在寻找消息属性,但您要求代码获取属性。
AttributeNames=['All']`
您似乎需要获取消息属性...
MessageAttributeNames=['All']
...调用 queue.receive_messages()
时。或者,您想要的特定消息属性名称(如果已知)可以用来代替 'All'
(如果我设计这个 API,它会被称为 '*'
,但是我跑题了)。
诚然,这只是我基于对底层API的熟悉程度的直觉猜测,但似乎与http://boto3.readthedocs.io/en/latest/guide/sqs.html一致。