[英]AWS SQS 1 queue 2 subscribers
我遇到了问题。 我正在尝试将单个SQS队列与两个长轮询nodeJS实例一起使用。 我面临的问题是,当我将新消息放入队列时,两个实例都立即提取相同的消息。 有没有办法防止这种行为? 我的目标是最终拥有一个NodeJS处理场,每个实例将从队列中提取一条唯一的消息并执行处理。
以下是我的SQS侦听器的代码:
console.log("Checking SQS Queue"); return new Promise((resolve,reject) => { let sqs = new aws.SQS(); let params = { AttributeNames: [ "SentTimeStamp" ], MaxNumberOfMessages: 1, MessageAttributeNames: [ "All" ], QueueUrl: SQS_URL, WaitTimeSeconds: 20, VisibilityTimeout: 0 }; sqs.receiveMessage(params, (err, data) => { if(err){ console.log("Error: ",err); reject(err); } else if (data.Messages) { resolve(data); } resolve(data); }); });
您需要设置一个更高的VisibilityTimeout ,至少是处理该消息所花费的时间,然后在一个实例从SQS读取该消息直到VisibilityTimeout值之前,该实例将对其他实例不可见。
创建队列时,请检查为队列设置的VisibilityTimeout。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.