首页 > 解决方案 > Amazon Java SQS 客户端:如何有选择地从队列中删除消息?

问题描述

我有一个 Spring Boot 类,它从(当前)FIFO SQS 队列接收消息,如下所示:

ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest()
        .withQueueUrl(queueUrl)
        .withMaxNumberOfMessages(numMessages);

Map<String, String> messageMap = new HashMap<>();
try {
    List<Message> messages = sqsClient.receiveMessage(receiveMessageRequest).getMessages();

    if (!messages.isEmpty()) {
        if (messages.size() == 1) {
            Message message = messages.get(0);
            String messageBody = message.getBody();
            String receiptHandle = message.getReceiptHandle();
         // snipped
        }
    }
 }

我希望能够“跳过”消息并仅找到要从该队列中删除的特定消息。我的领导确信这是可以做到的,但我有疑问。这些是我的想法:

标签: amazon-web-servicesamazon-sqs

解决方案


  1. 是的,正如您描述的那样:接收消息,提取回执句柄,提交删除消息请求
  2. 是的
  3. 通过简单地不做任何事情,消息将在其可见性超时到期后自动弹回队列中。请注意,即使是这样的基本接收也会增加接收计数器,并且可能会根据您的配置将消息推送到 dlq
  4. 不,延长可见性超时只会进一步延迟进一步处理

推荐阅读