2015-01-17 5 views
0

프로젝트에서 일부 작업을 처리하기 위해 RabbitMQ를 사용하고 있습니다. 내가 5 작업을 보낼 경우 현재는 Rabbit MQ의 직렬 처리 NodeJS

Job1 
Job2 
Job3 
Job4 
Job5 

모든 작업

가 대기열로 전달받을 말할 수 있지만, 작업 1을 완료하는 데 5 초 정도 걸립니다과 작업 2를 완료하는 데 2 ​​초 걸리는 경우, 실행 순서는 같은 된다

Job5 
Job1 etc., 

나에게이 모든 작업은 이전이 RabbitMQ 수신기 (작업 1, 작업 2, Job3, Job4, Job5 같은 실행 흐름을) 완료됩니다 후에 만 ​​실행 얻을 수 있도록 그것을 만들 수있는 방법이 있습니까? (데이브의 요청에 따라)

작업 실행

var amqp = require('amqplib'); 

amqp.connect('amqp://localhost').then(function(conn) { 
    process.once('SIGINT', function() { conn.close(); }); 
    return conn.createChannel().then(function(ch) { 

    var ok = ch.assertQueue('hello', {durable: false}); 

    ok = ok.then(function(_qok) { 
     return ch.consume('hello', function(msg) { 

     //JOB HERE 

     }, {noAck: true}); 

    }); 

    return ok.then(function(_consumeOk) { 
     console.log(' [*] Waiting for messages. To exit press CTRL+C'); 
    }); 
    }); 
}).then(null, console.warn); 

덕분에, 발안

+0

* 어떻게 * 작업을 처리하고 있습니까? –

+0

@DaveNewton 질문에서 Receiver end에 사용 된 코드를 추가했습니다. 작업은 섹션'// JOB HERE'에서 실행됩니다. 참고 : 작업에서 사용 된 콜백이 없습니다 – balanv

답변

0

는 당신이 응용 프로그램 논리와 혼동 RabbitMQ 서버를 생각한다. 간단히 말해서 메시지 처리 순서를 보장 할 수는 없습니다.

명확한 질문에 답하기 위해 대기열은 응용 프로그램이 응용 프로그램에서 가져 오는 방법을 신경 쓰지 않습니다. 큐는 응용 프로그램에 대한 메시지 만 제공합니다. 처리 방법은 사용자가 결정합니다 (예 : 직렬, 병렬 등). 모든 이점이없는 메시지 서버의 단점을 모두 지니고있는 경우에만 직렬 처리를 계획한다면 메시지 대기열을 사용하는 것이 타당하지 않다고 나는 주장합니다. 응용 프로그램을 좀 더 자세히 설명해도 될까요?

자세한 내용은 내 다른 대답 message order of delivery을 참조하십시오.

+0

RabbitMQ는 코드의 다른 로직과 함께 실행될 필요가없는 푸시 알림 호출과 같은 작업을 수신하고 실행한다는 것을 알고 있습니다. 하지만 내 요구 사항 중 하나에 대해 궁금해했습니다. 대기열 프로세스 요청을 하나씩 만들 수있는 기회가 있습니다. – balanv

+0

내 대답을 편집하십시오.를 참조하십시오. – theMayer