AWS SQS 1 очередь 2 подписчика - PullRequest
0 голосов
/ 11 июня 2018

Я столкнулся с проблемой.Я пытаюсь использовать одну очередь SQS с двумя длинными экземплярами polling 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);
        });
    });

1 Ответ

0 голосов
/ 11 июня 2018

Вам нужно установить более высокое VisibilityTimeout , по крайней мере, на время, необходимое для обработки сообщения, тогда оно не будет видно для другого экземпляра после того, как один экземпляр прочитает сообщение из SQS до значения VisibilityTimeout.

Пожалуйста, проверьте VisibilityTimeout, который вы установили для очереди, когда вы ее создали.

enter image description here

enter image description here

...