У меня настроена очередь 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 не выполнялся параллельно?Я показал все коды, сделаю это, если кому-то понадобится просмотреть более подробный рабочий файл.