jakarta-ee - 是否必须在 Java 中使用 JMS 实施 AWS 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 需要轮询。它不像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 示例以获取更多详细信息。
编辑
为了解决评论中发布的问题,处理 SQS 队列的一种方法是轮询线程中的特定 SQS 队列。虽然您可以轮询多个 SQS 队列,但在代码中轮询一个要简单一些。只要您的程序正在运行,您就会轮询 SQS 队列。如果您停止轮询它,您将不再收到任何 SQS 消息。
推荐阅读
- c - 在函数中传递地址后指向垃圾值的指针
- python - 后台任务不等待机器人准备好
- java - Whatsapp 自动发送消息而无需单击 android 上的发送按钮
- c++ - 如果我最终需要获取 char 指针,我可以安全地使用 string_view 吗?
- reactjs - 如何使用 react beautiful dnd 将任务项移动到初始列之外?
- sql - 仅从重复项中检索最低行
- linux - 为什么 file->private_data 不返回您的上下文数据?
- access-denied - 我无法在 cmd 中运行命令访问被拒绝以管理员身份
- linux-kernel - Linux 中的系统调用表会随时间变化吗?
- visual-studio-code - 如何在 VS Code 中指定选择前景(没有高对比度主题)?