如何一次性删除SQS队列中的所有消息Java

问题描述 投票:0回答:4

根据Amazon文档,从SQS队列中删除单个消息的代码是:

    // Delete a message
System.out.println("Deleting a message.\n");
String messageReceiptHandle = messages.get(0).getReceiptHandle();
sqs.deleteMessage(new DeleteMessageRequest()
    .withQueueUrl(myQueueUrl)
    .withReceiptHandle(messageReceiptHandle));

但是,假设我有超过 20 条左右的消息,我真的必须对每条消息都进行处理吗?或者有没有办法批量删除?

感谢您的任何见解。

java amazon-web-services amazon-sqs
4个回答
5
投票

如果你想删除所有不需要批量删除的消息,你应该像这样清除队列:

var request = new Amazon.SQS.Model.PurgeQueueRequest
{
    QueueUrl = "your queue url"
};
_sqsClient.PurgeQueue(request);

清除队列会删除队列中已有的所有消息


1
投票

只需查看 API 来执行类似的操作 DeleteMessageBatchRequest 似乎就可以解决问题。


0
投票

如果您查看 SDK 文档,您将看到一个

deleteMessageBatch
方法,该方法采用消息列表。


0
投票

为了完整起见,由于搜索时仍然会出现此问答,并且很难找到 Java 2 API 示例,因此这里是 Java 中的清除示例:

SqsClient sqs = SqsClient.builder()
         .region(Region.EU_WEST_1)
         .credentialsProvider(ProfileCredentialsProvider.create("default"))
         .build();


PurgeQueueRequest pqRequest = PurgeQueueRequest.builder()
            .queueUrl("your SQS queu URL (not ARN!)")
            .build();

sqs.purgeQueue(pqRequest);
© www.soinside.com 2019 - 2024. All rights reserved.