Android - 从AWS SQS获取消息

时间:2016-06-29 21:42:49

标签: android amazon-web-services

我有从AWS SQS返回消息的函数:

  public List<Message> getMessagesFromQueue(String queueUrl){
       ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl);
       List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
       return messages;
    }

问题在于它每次都返回不同数量的消息,而不是我队列中的所有消息。

2 个答案:

答案 0 :(得分:1)

我很遗憾听到您在使用API​​实现使用API​​读取SQS队列时遇到困难。您可以在此处从Java客户端找到receiveMessage的文档:

http://docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/com/amazonaws/services/sqs/AmazonSQSClient.html#receiveMessage-com.amazonaws.services.sqs.model.ReceiveMessageRequest-

receiveMessage的文档表明可能会返回1到10条消息。返回的数字可以通过调用ReceiveMessageRequest对象上的setMaxNumberOfMessages方法来限制;但是,这仅限制可能返回的最大消息量。要尝试读取队列中的所有消息,请尝试调用该方法,直到响应中没有消息返回。

答案 1 :(得分:0)

每次收到消息时,都会针对收到的消息触发可见性超时。这意味着在未来的接收消息调用之前不会返回消息,直到达到超时(默认为30秒)。这意味着在触发和恢复这些可见性超时时,消息将不断弹出。

可在此处找到更多信息:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html

此外,像Jeff Solinsky所指出的那样,你应该确保删除你收到并处理过的邮件,这样他们就不会污染你的队列。