使用SQS的消息去重机制可以解决这个问题。每条消息都有一个唯一的ID。当接收到消息时,可以将它们的IDs存储到一个Set中,以便后续检查是否重复接收到了相同的消息。以下是Java版本的示例代码:
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
String queueUrl = "your-queue-url";
Set messageIds = new HashSet<>();
while (true) {
List messages = sqs.receiveMessage(
new ReceiveMessageRequest(queueUrl)
.withWaitTimeSeconds(10)
.withMaxNumberOfMessages(10)).getMessages();
for (Message message : messages) {
if (!messageIds.contains(message.getMessageId())) {
// do something with the message
messageIds.add(message.getMessageId());
} else {
// the message has been received before
// do something else or just ignore it
}
}
}
在这个示例中,使用一个HashSet来存储已接收到消息的ID。当收到新消息时,只有当它的ID不在HashSet中时才对它进行处理。如果重复接收到了相同的消息,就可以在else分支中进行处理,例如忽略它或者重试处理它。