在 Java 中是否必须使用 JMS 实施 AWS SQS?
Is it mandatory to implement AWS SQS with JMS in Java?
我是 AWS SQS 的新手,我想在我的项目中实施它。我的问题是我可以独立实施 SQS 还是需要使用 SQS Java 消息传递库?你能帮我解决这个问题吗?提前致谢 。
绝对不需要 - 根本不需要 JMS。事实上,我建议不要使用它,因为它是 JMS 1.0 并且没有利用任何 JMS 2 代码。
您可以从创建队列这样简单的事情开始:
CreateQueueRequest createQueueRequest = new CreateQueueRequest("my-queue-name");
String queueUrl = amazonSQS.createQueue(createQueueRequest).getQueueUrl();
此队列然后可以将消息放入其中并从中读取。
最大的区别是SQS需要轮询。它不像 MessageListener
中的 onMessage
方法那样是事件驱动的。您一次最多可以轮询和接收 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 队列。这就是亚马逊 JMS/SQS 图书馆最终要做的事情。
查看 Java SQS examples 了解更多详情。
编辑
要解决评论中发布的问题,处理 SQS 队列的一种方法是轮询线程中的特定 SQS 队列。虽然您可以轮询多个 SQS 队列,但轮询一个队列在代码上要简单一些。而且只要你的程序是运行,你就会轮询SQS队列。如果您停止轮询它,您将不会再收到任何 SQS 消息。
我是 AWS SQS 的新手,我想在我的项目中实施它。我的问题是我可以独立实施 SQS 还是需要使用 SQS Java 消息传递库?你能帮我解决这个问题吗?提前致谢 。
绝对不需要 - 根本不需要 JMS。事实上,我建议不要使用它,因为它是 JMS 1.0 并且没有利用任何 JMS 2 代码。
您可以从创建队列这样简单的事情开始:
CreateQueueRequest createQueueRequest = new CreateQueueRequest("my-queue-name");
String queueUrl = amazonSQS.createQueue(createQueueRequest).getQueueUrl();
此队列然后可以将消息放入其中并从中读取。
最大的区别是SQS需要轮询。它不像 MessageListener
中的 onMessage
方法那样是事件驱动的。您一次最多可以轮询和接收 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 队列。这就是亚马逊 JMS/SQS 图书馆最终要做的事情。
查看 Java SQS examples 了解更多详情。
编辑
要解决评论中发布的问题,处理 SQS 队列的一种方法是轮询线程中的特定 SQS 队列。虽然您可以轮询多个 SQS 队列,但轮询一个队列在代码上要简单一些。而且只要你的程序是运行,你就会轮询SQS队列。如果您停止轮询它,您将不会再收到任何 SQS 消息。