Разбор сообщения SQS POST в узле.js

У меня есть веб-сервер и работник, которые общаются через SQS — вы загружаете изображение в корзину S3 через сервер, и он запрашивает сообщение в SQS, чтобы работник получал его из корзины, изменял его размер и загружал измененное изображение в ту же корзину.
Я настроил работника, чтобы получать уведомления от SQS, когда новое сообщение прибывает (сообщение), но я не могу, кажется, разобрать его успешно и получить имя изображения (это огромный JSON).
Как извлечь имя файла из него, если я написал сообщение в SQS с:

var params = {
        MessageBody:  JSON.stringify({data: msg.file}),
        QueueUrl: queueUrl
    };
SQS.sendMessage(params, function(err, data)...

Был бы очень признателен за помощь!

1 ответ

  1. Вы пробовали библиотеку aws-sdk? вот документы оттуда: https://milesplit.wordpress.com/2013/11/07/using-sqs-with-node/

    Вот сводка: первое подключение к sqs:

    var AWS = require('aws-sdk'),
        awsCredentialsPath = './aws.credentials.json',
        sqsQueueUrl = 'https://sqs.us-east-1.amazonaws.com/123455678/test-queue',
        sqs;
    
    // Load credentials from local json file
    AWS.config.loadFromPath(awsCredentialsPath);
    // Instantiate SQS client
    sqs = new AWS.SQS().client;
    

    Или, если вы не хотите использовать внешний файл:

    var AWS = require('aws-sdk'),
        sqsQueueUrl = 'https://sqs.us-east-1.amazonaws.com/123455678/test-queue',
        sqs;
    
    // Load credentials from local json file
    AWS.config.update({
       "accessKeyId": "YOUR AWS PUBLIC KEY",
       "secretAccessKey": "YOUR AWS SECRET KEY",
       "region": "us-east-1"
    });
    // Instantiate SQS client
    sqs = new AWS.SQS().client;
    

    Затем-прочитать сообщение:

    sqs.receiveMessage({
       QueueUrl: sqsQueueUrl,
       MaxNumberOfMessages: 1, // how many messages do we wanna retrieve?
       VisibilityTimeout: 60, // seconds - how long we want a lock on this job
       WaitTimeSeconds: 3 // seconds - how long should we wait for a message?
     }, function(err, data) {
       // If there are any messages to get
       if (data.Messages) {
          // Get the first message (should be the only one since we said to only get one above)
          var message = data.Messages[0],
              body = JSON.parse(message.Body);
          // Now this is where you'd do something with this message
          doSomethingCool(body, message);  // whatever you wanna do
       }
     });