Amazon web services 从SQS DLQ删除消息
如何从拥有大约10000条消息的SQS DLQ中删除消息ID已知的消息 我试着使用lambda函数来实现,但是使用它可以接收的最大消息只有10条Amazon web services 从SQS DLQ删除消息,amazon-web-services,aws-lambda,amazon-sqs,Amazon Web Services,Aws Lambda,Amazon Sqs,如何从拥有大约10000条消息的SQS DLQ中删除消息ID已知的消息 我试着使用lambda函数来实现,但是使用它可以接收的最大消息只有10条 最好的方法是什么?您的问题似乎只针对一条消息,但在任何情况下,您都可以使用deleteMessageBatch方法。在节点服务器中,您将具有以下功能: const AWS = require("aws-sdk"); const messageIds = ["1", "2", "3&
最好的方法是什么?您的问题似乎只针对一条消息,但在任何情况下,您都可以使用deleteMessageBatch方法。在节点服务器中,您将具有以下功能:
const AWS = require("aws-sdk");
const messageIds = ["1", "2", "3"];
const removeNotificationFromQueueData = messageIds.map((id) => {
return {
ReceiptHandle: id,
Id: id,
};
});
const sqs = new AWS.SQS();
sqs
.deleteMessageBatch({
QueueUrl: "http://myQueueUrlEndpoint",
Entries: removeNotificationFromQueueData,
})
.promise();
使用python脚本的另一种方法
#!/usr/bin/env python
import boto3
def delete_msg_id(queue_url, message_id):
"""Delete message based on message ID
:param queue_url: URL of the SQS queue to read.
:param message_id: message id to be deleted
"""
sqs_client = boto3.client("sqs")
while True:
resp = sqs_client.receive_message(
QueueUrl=queue_url, AttributeNames=["All"], MaxNumberOfMessages=10, WaitTimeSeconds=1
)
for msg in resp["Messages"]:
try:
if msg["MessageId"] == message_id:
sqs_client.delete_mesage(QueueUrl=queue_url, ReceiptHandle=msg["ReceiptHandle"])
except KeyError:
print('failed')
continue
if __name__ == '__main__':
delete_msg_id('my_sqs_url', 'my_msg_id')
Ref to您想删除所有邮件还是只删除部分邮件?如果有一些消息,您是否拥有所有消息的ReceiptHandle?