2017-01-14 22 views
1

Следующая функция получит несколько сообщений от sqs. Каждое сообщение должно обрабатываться и база данных обновляется соответствующим образом.Как справиться с несколькими сообщениями из SQS?

Я могу обработать одно сообщение, вызвав функцию pull из модуля worker. Но как бороться с несколькими сообщениями? Я не могу продолжать использовать метод pull модуля worker в цикле, поскольку он будет блокировать поток. Что здесь лучше всего?

function checkMessage(){ 
    var params = { 
       QueueUrl : Constant.QUEUE_URL, 
       VisibilityTimeout: 0, 
       WaitTimeSeconds: 20, 
       MaxNumberOfMessages: 10 
      } 
    sqs.receiveMessage(params,(err,data) => { 
     if(data){ 
      var workerId = uuidV4(); 
      // Now worker will pull the message for processing 
      // The worker response is returned in the callback function 
      Worker.pull(data,workerId,(err,respData) => { 
       if(respData){ 
        // If the message was successfully processed 
        // set the final job status to complete and 
        // progress to 100% 
       }else{ 
        // If the processing failed set the final 
        // job status to error 
       } 
      }); 
     } 
    }); 
} 

Pull метод из Worker модуля:

function pull(messageObject,workerId,cb){ 
    if(messageObject){ 
     var messageProcessed = true; 
     /* 
     * Process the message as required. Before starting the processing 
     * set the job status to processing. 
     */ 

     /** 
     * After the message has been processed, call the callback function 
     * inside monitor module. 
     */ 
     var callbackObject = {jobid : jobId, serverid : workerId}; 
     if(messageProcessed){ 
      return cb(null,callbackObject); 
     }else { 
      return cb(new Error('Failed to process messgae'),callbackObject); 
     } 
    } 
} 
+0

В чем проблема, когда вы делаете притяжение засыпают/дожидаетесь когда-нибудь, если есть нулевое сообщение? – mootmoot

ответ

1

Никто из кода не показан синхронный или процессор. Поэтому я бы проверил, действительно ли у вас есть эта проблема. Если код, не показанный , является синхронным или процессорным инстинктом, может возникнуть проблема, существует ли цикл или нет. Таким образом, вы можете использовать отдельный поток с webworker-threads или другим процессом. Если вам нужно просто обработать в порядке поиска npms.io для 'queue'.