Amazon web services 从SQS DLQ删除消息

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&

如何从拥有大约10000条消息的SQS DLQ中删除消息ID已知的消息

我试着使用lambda函数来实现,但是使用它可以接收的最大消息只有10条


最好的方法是什么?

您的问题似乎只针对一条消息,但在任何情况下,您都可以使用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?