【发布时间】:2019-02-13 13:24:29
【问题描述】:
我正在使用 SQS 读取数据。但我不确定如何从队列中读取所有数据。
public List<Customer> getMessage() {
int numberOfMessages= getMessageCount();
System.out.println(numberOfMessages);
int count=0;
while(count<10) {
System.out.println("Messages remaining in the queue-
>>>"+numberOfMessages);
System.out.println("Recieving Messages from the Queue: ");
final ReceiveMessageRequest receiveMessageRequest =
new ReceiveMessageRequest(queueURL)
.withMaxNumberOfMessages(10)
.withWaitTimeSeconds(20);
final List<com.amazonaws.services.sqs.model.Message> customers =
sqs.receiveMessage(receiveMessageRequest).getMessages();
for(com.amazonaws.services.sqs.model.Message cust: customers) {
System.out.println("Current message number->>>>>"+(count+1));
System.out.println(cust.getBody());
sqs.deleteMessage(new DeleteMessageRequest(queueURL,
cust.getReceiptHandle()));
count++;
}
//numberOfMessages=getMessageCount();
}
return null;
}
public int getMessageCount() {
Set<String> attrs = new HashSet<String>();
attrs.add("ApproximateNumberOfMessages");
CreateQueueRequest createQueueRequest = new CreateQueueRequest().withQueueName("sampleQueueSharma");
GetQueueAttributesRequest a = new GetQueueAttributesRequest().withQueueUrl(sqs.createQueue(createQueueRequest).getQueueUrl()).withAttributeNames(attrs);
Map<String,String> result = sqs.getQueueAttributes(a).getAttributes();
int num = Integer.parseInt(result.get("ApproximateNumberOfMessages"));
return num;
}
我正在以这种方式读取数据,但这似乎不对。
我还尝试将 while(count<10) 替换为 while(numberOfMessages>0) 并取消注释 numberOfMessages=getMessageCount() 这一行,但这样做,代码会无限期地运行。似乎它总是返回一个
值大于 1。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
您的程序似乎没有对消息的内容做任何事情——它只是在删除内容。这是故意的吗?您实际上想用代码完成什么?如果您只想清空现有队列,最简单的方法是使用PurgeQueue() 或通过控制台清空队列。
-
嘿@JohnRotenstein。实际上,我想从中创建一个 Lambda 函数,该函数将从 sqs 获取数据并将其发送到休息服务。暂时我只是想从sqs中获取数据并打印出来。
标签: java amazon-web-services spring-boot amazon-sqs aws-java-sdk