我有从AWS SQS返回消息的函数:
public List<Message> getMessagesFromQueue(String queueUrl){
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl);
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
return messages;
}
问题在于它每次都返回不同数量的消息,而不是我队列中的所有消息。
答案 0 :(得分:1)
我很遗憾听到您在使用API实现使用API读取SQS队列时遇到困难。您可以在此处从Java客户端找到receiveMessage的文档:
receiveMessage的文档表明可能会返回1到10条消息。返回的数字可以通过调用ReceiveMessageRequest对象上的setMaxNumberOfMessages方法来限制;但是,这仅限制可能返回的最大消息量。要尝试读取队列中的所有消息,请尝试调用该方法,直到响应中没有消息返回。
答案 1 :(得分:0)
每次收到消息时,都会针对收到的消息触发可见性超时。这意味着在未来的接收消息调用之前不会返回消息,直到达到超时(默认为30秒)。这意味着在触发和恢复这些可见性超时时,消息将不断弹出。
可在此处找到更多信息:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html
此外,像Jeff Solinsky所指出的那样,你应该确保删除你收到并处理过的邮件,这样他们就不会污染你的队列。