Cma*_*mag 4 amazon-sqs amazon-web-services node.js express
伙计们,我想在Java API和NodeJS API之间建立一个消息队列.在阅读了几个使用示例之后aws-sdk,我不确定如何使服务观察队列.
例如,本文使用SQS与节点:接收消息示例代码告诉我使用sqs.receiveMessage()接收和sqs.deleteMessage()删除消息.
我不清楚的是,如何将其包装到一个连续运行的服务中,该服务不断地将消息从sqs队列中取出,将它们传递给模型,将它们存储在mongo中等等.
希望我的问题不完全模糊.我对Node的经验主要在于Express.js.
答案就像使用sqs-poller之类的东西一样简单吗?我如何在已经运行的NodeJS Express应用程序中实现相同的功能?很可能我应该调查SNS在消息传输方面没有任何延迟.
谢谢!
首先,Amazon SQS是一个伪队列,它保证消息的可用性,但不保证FIFO方式的序列.如果您希望它以这种方式工作,您必须在您的应用程序中实现排序逻辑.
回到你的问题,必须在你的应用程序中对SQS进行轮询,以检查是否有新消息可用.我在app中实现了这个setInterval().我会在队列中查询项目,如果没有找到任何项目,我会延迟下一个电话,如果找到一些项目,下一个电话将立即绕过该电话setInterval().这显然是一个非常原始的实现,您可以查看替代方案.当在SQS中找到新项目时,您的服务器上的子进程如何ping您的NodeJS应用程序?我认为您可以在不使用NodeJS的情况下将子进程实现为BASH中的观察者.你也可以查看npm模块,如果已有的话.
简而言之,您可以通过多种方式进行轮询,但如果您正在使用Amazon SQS,则必须以某种方式进行轮询.
我不确定这一点,但如果您想收到有关项目的通知,您可能需要查看Amazon SNS.
小智 6
在编写应用程序以使用来自SQS的消息时,我使用sqs-consumer:
const Consumer = require('sqs-consumer');
const app = Consumer.create({
queueUrl: 'https://sqs.eu-west-1.amazonaws.com/account-id/queue-name',
handleMessage: (message, done) => {
console.log('Processing message: ', message);
done();
}
});
app.on('error', (err) => {
console.log(err.message);
});
app.start();
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅文档(详细记录):https: //github.com/bbc/sqs-consumer
| 归档时间: |
|
| 查看次数: |
2444 次 |
| 最近记录: |