2017-01-14 8 views
1

Как моя функция постоянно проверяет наличие входящего сообщения? После получения сообщения завершается следующая функция. Учитывая, что длительный опрос включен для очереди, как я могу постоянно проверять наличие нового сообщения?Проверить входящее сообщение в aws sqs

function checkMessage(){ 
    var params = { 
       QueueUrl : Constant.QUEUE_URL, 
       VisibilityTimeout: 0, 
       WaitTimeSeconds: 0 
      } 
    sqs.receiveMessage(params,(err,data) => { 
     if(data){ 
      console.log("%o",data); 
     } 
    }); 
} 

ответ

3

Ваша функция должна будет постоянно опробовать Amazon SQS.

Длительный опрос задерживает ответ на 20 секунд, если сообщений нет. Если сообщение становится доступным в течение этого периода, оно будет немедленно возвращено. Если после 20 секунд сообщения нет, он возвращается без предоставления сообщения.

Таким образом, ваша функция должна будет снова опросить SQS (возможно, что-то еще сделать за это время).

+0

Должен ли я вызывать одну и ту же функцию через равные промежутки времени? –

+0

Да. В зависимости от того, насколько быстро вам нужно обрабатывать сообщения, вы можете назвать это очень минутно или даже каждые пять минут. Это твой выбор. –

3
var processMessages = (function (err, data) { 
    if (data.Messages) { 

     for (i = 0; i < data.Messages.length; i++) { 
      var message = data.Messages[i]; 
      var body = JSON.parse(message.Body); 

      // process message 
      // delete if successful 
     } 
    } 
}); 

while (true) { 
    sqs.receiveMessage({ 
     QueueUrl: sqsQueueUrl, 
     MaxNumberOfMessages: 5, // how many messages to retrieve in a batch 
     VisibilityTimeout: 60, // how long until these messages are available to another consumer 
     WaitTimeSeconds: 15  // how many seconds to wait for messages before continuing 
    }, processMessages); 
} 
+0

Не будет ли это называть приложение nodejs в цикле навсегда? –

+0

Это был иллюстративный код, чтобы полностью ответить «как я могу постоянно проверять». В этом случае он будет ждать до 15 секунд на каждой итерации. Естественно, вы можете использовать цикл for с конечными итерациями, если это лучше подходит для вашего случая использования. Вы также можете предпочесть работать с эластичным beanstalk для обработки ваших сообщений SQS: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html?shortFooter=true#worker- демон –