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);
}
}
}
잡아 당기거나 잠시 기다려야 할 때 문제가되는 메시지는 무엇입니까? – mootmoot