我正在尝试一条一条地接收并删除该消息。这是我的代码供您引用。
def receive_delete(url , attr_names):
global sqs
response = sqs.receive_message(QueueUrl=url,
AttributeNames=attr_names,
MaxNumberOfMessages=10,
MessageAttributeNames=['All'])
delete_msgs = []
for messages in response['Messages']:
delete_msgs.append({'Id':messages['MessageId'],
'ReceiptHandle': messages['ReceiptHandle']})
while len(delete_msgs) > 0:
sqs.delete_message(QueueUrl=url , ReceiptHandle=['ReceiptHandle'])
然后我像这样调用该函数...
x = receive_delete("https://sqs.us-east-1.amazonaws.com/266638361021/tony.fifo", attr)
问题是,当我运行此方法时,它会卡住,当我检查亚马逊 sqs 仪表板时,它只显示一条消息被删除。
收到消息后如何一条一条删除?
最佳答案
这对我有用。
我从 FIFO 队列中读取一条消息(一条)并在中间进行处理,然后使用 receiptHandle
进行删除。这是代码 -
import boto3
queue = "your_queue_url"
def process_message():
sqs_client = boto3.client("sqs")
response = sqs_client.receive_message(
QueueUrl=queue,
MaxNumberOfMessages=1,
WaitTimeSeconds=15,
)
# print(response)
# print(response)
print(f"Number of messages received: {len(response.get('Messages', []))}")
message = response.get("Messages", [])[0]
# print(message)
message_body = message["Body"]
receipt_handle = message['ReceiptHandle']
print(f"Message body: {message_body}")
print(f"Receipt Handle: {receipt_handle}")
# trying to delete the message
dlt_response = sqs_client.delete_message(
QueueUrl=queue,
ReceiptHandle=receipt_handle
)
print("Deleted? ", message_body)
print(dlt_response['ResponseMetadata']['HTTPStatusCode'])
process_message()
希望这有帮助。
关于amazon-web-services - 使用boto3从sqs接收和删除消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54779716/