очереди SQS выполняются параллельно?как это отключить? - PullRequest
0 голосов
/ 15 февраля 2019

У меня настроена очередь SQS и получатель для обработки каждого сообщения, переданного в handle_sisense_group_assignment

Рабочий:

const handle_message = require("./lib/handle_sisense_group_assignment").handle_message;
var worker = (new Worker(
    sqs,
    config.aws.sqs.url,
    config.aws.sqs.visibilityTimeout,
    config.aws.sqs.waitTimeSeconds,
)).handleMessageWith(handle_message)
.setInvincible();

handleMessageWith(callback) {
        if(typeof(callback) !== "function")
            throw new Error("Invalid callback provided, expecting a function");

        this._message_handler = callback;
        return this;
    }

Внутри handle_sisense_group_assignment.handle_message,Я обрабатываю каждое сообщение.с асинхронным, как предоставление или удаление.а затем куча API-вызовов третьему лицу.

Очередь потребления:

async function handle_message(message){
    console.log( '***called handle message***** pid is ', process.pid + '\n', message);
    // get user email 
    var body = JSON.parse(message.Body)


    if (payload.action == 'grant') {
            await grantActions(message)
            //return true


    } else if (payload.action == 'remove') {
            await removeActions(message)
            //return true


    } else {
        throw Error('wrong action type!')
    }
}

ВЫПУСК: Однако, если сообщение больше 1, handle_message всегда выдает некоторую ошибку.как попытка создать одного и того же пользователя несколько раз не допускается.вывод pid одинаков, поэтому я могу только предположить, что handle_message вызывается параллельно, при этом оба вызова выполняют create user, потому что оба пользователя validate еще не существуют.

Вопрос: Как лучше всего решить эту проблему?это мой код делает что-то не так?или должна быть настройка, чтобы SQS не выполнялся параллельно?Я показал все коды, сделаю это, если кому-то понадобится просмотреть более подробный рабочий файл.

...