Как использовать SQS sendMessageBatch () для отправки более 10 сообщений? - PullRequest
0 голосов
/ 03 февраля 2020

Я думал, что с этим фрагментом кода они отправляют все сообщения в мою очередь SQS, но при использовании более 10 значений в моем массиве я всегда получаю сообщение о том, что превышено ограничение, достигнутое.

Я не могу увеличить SQS, поэтому мне нужно отправлять сообщения с 10 до 10.

У кого-нибудь есть предложения относительно наилучшего подхода, который мне нужен в этом конкретном случае?

module.exports.sendMessageBatch = function sendMessages(queueUrl, messages) {    
for (var i = 0; i < messages.length;) {
    var params = { 
        QueueUrl: queueUrl,
        Entries: [] 
    };
    for (var j = 0; j < 10 && i < messages.length; i++ , j++) {
        params.Entries.push({
            Id: uuid.v4(),
            MessageBody: JSON.stringify(messages[i])
        });
    }
    return sqs.sendMessageBatch(params).promise();
}

1 Ответ

1 голос
/ 03 февраля 2020

Документация SendMessageBatch - Amazon Simple Queue гласит, что вы можете отправлять только до 10 сообщений одновременно, поэтому вам придется писать свои собственные логики c. В основном разделите массив на 10 и отправьте запрос в al oop. Примерно так:

const splitArray = require("split-array");

async function sendMessages(queueUrl, messages) {
  const spilttedArray = splitArray(messages, 10);
  for (const arr of spilttedArray) {
    var params = {
      QueueUrl: queueUrl,
      Entries: []
    };
    for (const message of arr) {
      params.Entries.push({
        Id: uuid.v4(),
        MessageBody: JSON.stringify(message)
      });
    }
    await sqs.sendMessageBatch(params).promise();
  }
}

Существует пакет, который поддерживает последовательную и параллельную отправку массовых сообщений в случае, если вы хотите go по этому маршруту. SQS-балк-погрузчик

...