我是AWS SQS的新手,我想在我的项目中实现它。我的问题是我可以独立实现SQS还是需要使用SQS Java Messaging Library?您能帮我吗?提前致谢 。
答案 0 :(得分:1)
绝对不是-完全不需要JMS。确实,我建议不要使用它,因为它是JMS 1.0,并且不利用任何JMS 2代码。
您可以从创建队列这样简单的事情开始:
CreateQueueRequest createQueueRequest = new CreateQueueRequest("my-queue-name");
String queueUrl = amazonSQS.createQueue(createQueueRequest).getQueueUrl();
然后该队列可以放入消息并从中读取。
最大的不同是SQS需要轮询。它不是像onMessage
中的MessageListener
方法那样的事件驱动的。您一次最多可以轮询和接收10条消息。看起来像这样:
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl)
.withMaxNumberOfMessages(10)
.withWaitTimeSeconds(5);
List<Message> messages = amazonSQS.receiveMessage(receiveMessageRequest).getMessages();
for (Message message : messages) {
// process each message
}
话虽如此,您可以让线程进行读取,并且如果有消息,则可以根据需要自己将其发送到JMS队列。最终,这就是Amazon JMS / SQS库正在做的事情。
查看Java SQS examples以获得更多详细信息。
编辑
要解决评论中发布的问题,处理SQS队列的一种方法是轮询线程中的特定SQS队列。尽管可以轮询多个SQS队列,但轮询一个队列的代码要简单一些。只要您的程序正在运行,您就会轮询SQS队列。如果您停止轮询,您将不再收到任何SQS消息。