如何使用 SQS sendMessageBatch() 发送超过 10 条消息?

Fab*_*cio 2 amazon-sqs amazon-web-services node.js

我在想那段代码他们正在将所有消息发送到我的 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();
}
Run Code Online (Sandbox Code Playgroud)

Ash*_*odi 6

SendMessageBatch -亚马逊简单队列服务文档说,你只能一次发送多达10条信息,所以你必须编写自己的逻辑。基本上将数组分成 10 个批次,然后在循环中发送请求。像这样的东西:

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

有一个包支持按顺序和并行发送批量消息,以防您想通过该路由。sqs-bulk-loader