如何解决通过NodeJS客户端接收所有SQS消息
我对Node中SQS客户端的行为感到困惑。似乎不可能遍历具有单个SQS实例的队列的所有消息。下面的代码在循环中加载时返回零消息。
const sqs = new SQS();
let messages = await sqs.receiveMessage({ QueueUrl: "...",MaxNumberOfMessages: 10 }).promise();
while (messages?.Messages?.length > 0) {
messages.Messages.forEach((message) => { console.log(message.Body); });
messages = await sqs.receiveMessage({ QueueUrl: "...",MaxNumberOfMessages: 10 }).promise();
}
一旦将代码更改为每次在循环内使用新的SQS实例,如下所示,它就可以正常工作。
let messages = await new SQS().receiveMessage({ QueueUrl: "...",MaxNumberOfMessages: 10 }).promise();
while (messages?.Messages?.length > 0) {
messages.Messages.forEach((message) => { console.log(message.Body); });
messages = await new SQS().receiveMessage({ QueueUrl: "...",MaxNumberOfMessages: 10 }).promise();
}
不幸的是,我在文档中找不到任何提示。
有人知道导致该行为的原因吗?
编辑:将await
关键字添加到使用.promise()
的行中。谢谢马克B
解决方法
弄清所描述行为的原因是队列的fifo配置。
删除fifo: true
配置解决了我的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。