Amazon web services 通过SQS lambda发送SQS消息
我有一个连接到lambda的Amazon web services 通过SQS lambda发送SQS消息,amazon-web-services,aws-lambda,amazon-sqs,Amazon Web Services,Aws Lambda,Amazon Sqs,我有一个连接到lambda的种子指示符信息qs-dev.fifo队列(fifo)。我想在种子指示信息QS-dev-d13dfe0lambda中向评估配置SQS dev标准队列发送一条消息。但没有发送/接收任何消息。然而,如果我尝试从非SQS连接的lambda(通过AppSync)发送它,它会工作 种子指示信息QS-dev-d13dfe0lambda具有以下权限: 我查过: lambda有权发送SQS消息(您可以在那里看到) 由于我已成功地从另一个lambda(非SQS)向标准队列发送消息,因
种子指示符信息qs-dev.fifo
队列(fifo)。我想在种子指示信息QS-dev-d13dfe0
lambda中向评估配置SQS dev
标准队列发送一条消息。但没有发送/接收任何消息。然而,如果我尝试从非SQS连接的lambda(通过AppSync)发送它,它会工作
种子指示信息QS-dev-d13dfe0
lambda具有以下权限:
我查过:
- lambda有权发送SQS消息(您可以在那里看到)
- 由于我已成功地从另一个lambda(非SQS)向标准队列发送消息,因此正确配置了
标准队列EvaluationConfigSQS dev
- SQS URL是否正确李>
- 控制台中不会显示任何错误李>
- async/await的位置正确(我试过使用和不使用它们)
seedIndicationInformationQS-dev-d13dfe0
lambda的CloudWatch日志:成功发送到正确的URL,JSON解析为字符串,但什么都没有
这是CloudWatch日志:您可以看到<代码>种子指示信息QS-dev-d13dfe0成功地从另一个lambda函数接收消息并对其进行处理,但不会发送更多消息
种子指示信息QS-dev-d13dfe0中未报告任何错误
EvaluationConfigSQS dev
但是,如果我尝试在非SQS lambda中发送它,它会工作。
收到的事件:
这是成功发送到EvaluationConfigSQS dev
的classes-dev-eefa2af
lambda(同时也是触发种子指示器SQS-dev.fifo
SQS的lambda)。
以下是EvaluationConfigSQS-dev-6da8b90
的权限(EvaluationConfigSQS dev
标准队列触发的lambda)
我是否需要向种子指示符信息QS-dev.fifo
队列添加特殊权限?
这是被调度的JS(我使用了一个中介模式,它成功地被调度了,你可以在上面的“调度创建的机构类”日志中看到它)。我还打印了URL,并验证了它实际上是与之对应的URL
导出异步函数institutionClassCreatedEventHandler(
evt:InstitutionClassCreatedEvent
) {
const json=json.stringify({
…evt,
类型:“已创建类”,
});
sqsDispatchMessage(
“InstitutionClassCreatedEvent”,
evt.tenantId+evt.subject.id,
json,
Config.SQS.evaluationConfigSQS.url,
假的
);
}
这是sqsDispatchMessage函数。正如您所看到的,有一个catch块,每当出现错误时(它可以工作),它就会打印我。但是到目前为止,还没有记录任何错误
导出异步函数sqsDispatchMessage(
eventName:string,
唯一标识:字符串,
jsonObjStringifiedToSend:string,
sqsURL:string,
isFifoQueue:boolean=true
) {
试一试{
等待sqs
.sendMessage({
消息属性:{
事件名称:{
数据类型:“字符串”,
StringValue:eventName,
},
},
…(isFifoQueue&&{MessageGroupId:eventName}),
MessageBody:jsonObjStringifiedToSend,
QueueUrl:sqsURL,
…(isFifoQueue&&{MessageDeduplicationId:uniqueId}),
})
.promise();
}捕获(e){
error(`error While Sending the${eventName}`);
控制台错误(e.message);
log(jsonObjStringifiedToSend);
}
}
有什么想法吗?可能吗?问题出在我的调度员身上:
过去是这样的:
导出异步函数dispatchOfEvents({
类型,
埃夫塔格斯,
}字体事件:承诺{
对数时间(类型);
(任意事件)[type].forEach((evt:Function)=>{
evt(evtArgs);
});
}
我把它改成:
导出异步函数dispatchOfEvents({
类型,
埃夫塔格斯,
}字体事件:承诺{
对数时间(类型);
const evts:Promise[]=[];
for(const evt of(事件作为任何事件)[类型]){
evt.push(evt(evtArgs));
}
等待承诺。全部(EVT);
}
BTW,没有VPC参与查看发布的代码片段,我认为这可能是异步调用未被正确等待的情况。请为AWS SDK启用详细日志记录,以检查是否确实进行了SQSsendMessage
API调用并收到了响应。@就是这样!我的问题是中介模式我实现的。对于基于事件的调度,我从未等待过实现!全部修复!!!非常感谢!!