javascript - 如何在我现有的 nodejs 服务器上使用 sqs 消息
问题描述
我想在 SQS 收到新消息时接收并触发电子邮件,现在我已经运行了 nodejs 服务器,我怎样才能让它工作?我真的不想触发那个功能。但我希望当 SQS 中有新消息时,这个消费者将消费并执行发送电子邮件的业务逻辑。
但我的职能没有得到任何触发。注意:我没有调用这个函数,我希望它在 SQS 有新消息时自动触发。
const AWS = require('aws-sdk');
const mongoose = require('mongoose');
//
// Configure the aws details
//
AWS.config.update({
region: process.env['AWS_REGION'],
accessKeyId: process.env['AWS_ACCESS_KEY_ID'],
secretAccessKey: process.env['AWS_SECRET_ACCESS_KEY']
});
const sqs = new AWS.SQS({apiVersion: '2012-11-05'});
var queueURL = "https://sqs.us-east-1.amazonaws.com/xxxxx/demo-lambda-to-email-sqs"
var params = {
AttributeNames: [
"SentTimestamp"
],
MaxNumberOfMessages: 1,
MessageAttributeNames: [
"All"
],
QueueUrl: queueURL,
VisibilityTimeout: 20,
WaitTimeSeconds: 0
};
sqs.receiveMessage(params, function(err, data) {
if (err) {
console.log("Receive Error", err);
} else if (data.Messages) {
console.log('--------------------------- MESSAGE RECEIVED -------------')
var deleteParams = {
QueueUrl: queueURL,
ReceiptHandle: data.Messages[0].ReceiptHandle
};
sqs.deleteMessage(deleteParams, function(err, data) {
if (err) {
console.log("Delete Error", err);
} else {
console.log("Message Deleted", data);
}
});
}
});
解决方案
SQS 是一种排队服务,因此需要通过基于拉的机制而不是基于推的机制来使用它。
仅当您具有轮询 SQS 队列的功能时才能调用此函数,然后在消息进入时触发该函数。
如果您不想维护使用者脚本,则应考虑将此脚本迁移到 Lambda 函数中。使用此选项时,Lambda 服务将充当队列的消费者,并仅在添加消息时触发 Lambda 函数。
推荐阅读
- javascript - 为什么事件的目标是选择元素而不是选择的选项?
- sql - SQL SUM 多行时间
- c# - WPF MVVM 从 ViewModelClass 直接访问对象列表
- istio - Istio 授权策略以排除同一命名空间中的某些应用程序
- function - 在 CPLEX 中使用什么函数,它只取大于零的值
- javascript - 如何链接 Java 代码用于进一步执行的 JavaScript webapp 应用程序生成的文件
- php - 在文件 PSD 中使用 imagick 和 php
- javascript - 需要连接d3中不同圆形打包布局的两个节点并打包布局折叠/展开
- sails.js - 在 Sails 处于生产模式时,Recaptcha POST 请求返回 Forbidden
- postgresql - 制作一个触发函数,当时间戳保存在它遇到的列中时触发