2017-01-14 8 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 방법 : 코드의

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

없음이 표시되지 집중적 동기 또는 CPU입니다. 그래서 당신은 실제로 그 문제가 있는지 테스트 할 것입니다. 코드가 동기 또는 CPU 인텐시브이면 루프가 있는지 여부에 문제가있을 수 있습니다. 따라서 webworker-threads 또는 다른 프로세스와 별도의 스레드를 사용할 수 있습니다. npms.io에서 '대기열'을 검색하려면 순서대로 처리해야합니다.