我有一个简单的类名叫做QueueService
,其中包含一些方法,这些方法包装了AWS SQS SDK for Java中的方法。例如:
public ArrayList<Hashtable<String, String>> receiveMessages(String queueURL) {
List<Message> messages = this.sqsClient.receiveMessage(queueURL).getMessages();
ArrayList<Hashtable<String, String>> resultList = new ArrayList<Hashtable<String, String>>();
for(Message message : messages) {
Hashtable<String, String> resultItem = new Hashtable<String, String>();
resultItem.put("MessageId", message.getMessageId());
resultItem.put("ReceiptHandle", message.getReceiptHandle());
resultItem.put("Body", message.getBody());
resultList.add(resultItem);
}
return resultList;
}
我有另一个名为App
的类,它具有main
并创建了QueueService
的实例。
我正在寻找一种“模式”,使得App
中的main
可以监听队列中的新消息。现在我有一个while(true)
循环,在其中调用receiveMessages
方法:
while(true) {
messages = queueService.receiveMessages(queueURL);
for(Hashtable<String, String> message: messages) {
String receiptHandle = message.get("ReceiptHandle");
String messageBody = message.get("MessageBody");
System.out.println(messageBody);
queueService.deleteMessage(queueURL, receiptHandle);
}
}
这是正确的方式吗?我应该在 SQS SDK 中使用异步消息接收方法吗?