伙计们,
我想在我们的 Java API 和 NodeJS API 之间建立一个消息队列。
在阅读了几个使用 aws-sdk 的示例后,我不确定如何让服务监视队列。

例如,这篇文章 Using SQS with Node: Receiving Messages Example Code 告诉我使用 sqs.receiveMessage() 接收和 sqs.deleteMessage() 删除消息。

我不清楚的是如何将它包装成一个连续运行的服务,它不断地从 sqs 队列中取出消息,将它们传递给模型,将它们存储在 mongo 中,等等。

希望我的问题不是完全含糊。我在 Node 方面的经验主要在于 Express.js。

答案是否像使用 sqs-poller 之类的东西一样简单?我将如何在已经运行的 NodeJS Express 应用程序中实现相同的功能?很可能我应该研究 SNS,以免消息传输有任何延迟。

谢谢!

最佳答案

首先,Amazon SQS 是一个伪队列,它以 FIFO 方式保证消息的可用性,但不保证消息的顺序。如果你希望它以这种方式工作,你必须在你的应用程序中实现排序逻辑。

回到您的问题,必须在您的应用程序中轮询 SQS 以检查是否有新消息可用。我使用 setInterval() 在应用程序中实现了这一点。我会轮询队列中的项目,如果没有找到项目,我会延迟下一次调用,如果找到了一些项目,下一次调用将立即绕过 setInterval() 。这显然是一个非常原始的实现,您可以研究替代方案。当在 SQS 中发现新项目时,服务器上的子进程会 ping 您的 NodeJS 应用程序吗?我认为您可以在不使用 NodeJS 的情况下在 BASH 中将子进程实现为观察者。如果已经有 npm 模块,您也可以查看 npm 模块。

简而言之,您可以通过多种方式进行轮询,但如果您正在使用 Amazon SQS,则必须以一种或另一种方式进行轮询。

我不确定这一点,但如果您想收到有关项目的通知,您可能需要查看 Amazon SNS。

关于node.js - NodeJS 和 AWS SQS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28358226/

10-14 12:54