我有以下基础设施:
我有一个带有NodeJS + Express进程的EC2实例在端口上侦听消息(进程1).每次进程收到消息时,都会将其发送到SQS队列.然后我在同一台机器上有另一个进程使用长轮询读取队列(进程2).当它在队列中找到消息时,它会将数据插入位于RDS实例上的MariaDB数据库中.
(只是为了澄清,消息是由用户生成的,他们发送一大块数据,其中包含任意信息到进程1正在侦听的端点)
现在我想将读取SQS(进程2)的进程放在Lambda函数中,以便写入队列的进程和从队列中读取的进程完全独立.问题是我不知道这是否可行.
我知道Lambda函数是为响应事件而调用的,目前支持的事件是S3,SNS,SES,DynamoDB,Kinesis,Cognito,CloudWatch和Cloudformation,但不是SQS.
我正在考虑使用SNS通知来调用Lambda函数,以便每次将消息推送到队列时,都会触发SNS通知并调用Lambda函数,但在使用它后,我意识到这是不可能的从SQS创建SNS通知,只能将SNS通知写入队列.
现在我有点卡住,因为我不知道如何继续.由于AWS服务的当前限制,我觉得无法创建此基础结构.还有另一种方法可以做我想做的事情,还是我处于死胡同?
只是为了通过我所做的一些研究扩展我的问题,这个github repo展示了如何从Lambda函数读取SQS队列,但 lambda函数只有在从命令行触发时才有效:
https://github.com/robinjmurphy/sqs-to-lambda
在自述文件中,作者提到了以下内容:
更新:Lambda现在支持SNS通知作为事件源,这使得这个hack完全不需要SNS通知.如果您喜欢使用Lambda函数处理SQS队列上的作业,您可能仍会发现它很有用.
但我认为这不能解决我的问题,SNS通知可以调用Lambda函数,但是当我在SQS队列中收到消息时,我看不到如何创建通知.
谢谢
我不知道标题是否适合我想做的事情。
我有以下对象数组
array([0]: {category: "10",
question: "101"},
[1]: {category: "10",
question: "102"},
[2]: {category: "20",
question: "201"}
);
Run Code Online (Sandbox Code Playgroud)
我想将所有元素组合成这样:
array([0]: {category: "10", {question: "101",
question: "102"}},
category: "20", {question: "201"}});
Run Code Online (Sandbox Code Playgroud)
我不知道这是否可行,或者是否有另一种更好的方法来解决这个问题(也许使用二维数组?)但任何帮助将不胜感激。
谢谢!
抱歉缺少信息,以下是我创建对象数组的方法:
var arr_sections = [];
var arr_questions = [];
var jsonObj = [];
$('.ui-sortable-nostyle').each(function(){
arr_sections.push($(this).attr("sec_id"));
});
// create json object with pairs category - question
$(".sortable2").each(function(i){
$(this).children().each(function(j){
var cat = arr_sections[i];
jsonObj.push({
category: arr_sections[i],
question: $(this).attr("ques_id")
});
});
});
Run Code Online (Sandbox Code Playgroud)
并获得了具有以下结构的对象数组:
[Object, Object, Object, Object, Object]
0: Object
category: …Run Code Online (Sandbox Code Playgroud)