AWS SQS 1队列2订户

时间:2018-06-11 02:51:11

标签: javascript node.js amazon-sqs

我遇到了问题。我正在尝试使用具有两个长轮询nodeJS实例的单个SQS队列。我面临的问题是,当我将新消息放入队列时,BOTH实例立即拉出相同的消息。有没有办法防止这种行为?我的目标是最终拥有一个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);
        });
    });

1 个答案:

答案 0 :(得分:3)

您需要设置更高的VisibilityTimeout,至少需要处理消息所需的时间,然后在一个实例从SQS读取消息到VisibilityTimeout值之后,其他实例将无法看到它。

请检查您在创建队列时为队列设置的VisibilityTimeout。

enter image description here

enter image description here