AWS SQS 监听和轮询是两种常见的消息队列消费方式。SQS 监听可以让应用程序实时响应消息队列的新消息,而轮询则需要定期检查队列是否有新的消息。
使用 AWS SDK for Java 提供的 Amazon SQS 客户端可以轻松地实现监听和轮询两种方式。以下是示例代码:
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
String queueUrl = "https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue";
// 使用 Long Polling 等待新消息
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl)
.withWaitTimeSeconds(20);
while (true) {
List messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
for (Message message : messages) {
System.out.println("Message received: " + message.getBody());
sqs.deleteMessage(queueUrl, message.getReceiptHandle());
}
}
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
String queueUrl = "https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue";
while (true) {
List messages = sqs.receiveMessage(queueUrl).getMessages();
for (Message message : messages) {
System.out.println("Message received: " + message.getBody());
sqs.deleteMessage(queueUrl, message.getReceiptHandle());
}
// 等待 5 秒后再次轮询
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
上述代码中,queueUrl 是消息队列的 URL 地址。在监听方式中,使用 ReceiveMessageRequest 类设置 Long Polling 等待时间;在轮询方式中,使用 Thread.sleep 方法设置等待时间。
需要注意的是,如果使用轮询方式,需要根据业务需求设置适当的等待时间,以达到不浪费资源的目的。
下一篇:AWSSQS仅一次返回1条消息