2016-08-13 2 views
0

현재 대기열에서 작업을 처리하는 데 Node.js Kue를 사용하려고합니다.하지만 제대로 수행하지 못하고 있다고 생각합니다.Redis 연결을 기다리는 방법?

현재 제가 일하고있는 방식으로 두 개의 다른 서비스 (이 경우에는 Docker Compose로 실행 중입니다)가 있습니다. Express와 함께 구축 된 하나의 웹 API는 작업을 대기열 및 처리 모듈로 보냅니다. 문제는 처리 모듈에 있습니다. 다음과 같이 내가 코딩 한

는 :

var kue = require('kue'); 
var config = require('./config'); 

var queue = kue.createQueue({ 
    prefix: config.redis.queuePrefix, 
    redis: { 
     port: config.redis.port, 
     host: config.redis.host 
    } 
}); 

queue.process('jobType', function (job, done) { 
    // do processing here... 
}); 

우리는 처리를 할 큐에 배치 할 것을 기다리고있다 앉아, 노드와 함께이 프로그램을 실행할 때.

  1. 그것은 레디 스가 이 모듈을 실행하기 전에 사용할 수 있음을 필요 :

    그러나 두 가지 문제가 있습니다. 이미 Redis를 사용하지 않고이 프로그램을 실행하면 호스트에 액세스 할 수 없어 프로세스가 종료되기 때문에 충돌이 발생합니다.

  2. Redis가 갑자기 사용할 수 없게되면 처리 모듈도 연결을 유지할 수 없으며 프로세스가 종료되기 때문에 충돌합니다.

이러한 문제를 어떻게 피할 수 있습니까?

제가 생각하기에 Redis의 코드를 "대기"해야한다고 생각합니다.하지만 어떻게해야할지 모릅니다.

이 경우 어떻게 수행 할 수 있습니까?

답변

0

redis가로드 될 때까지 기다릴 수 있습니다. 그런 다음 모듈을 실행하십시오.

loadRedis().then(() => { 
    //load your module 
}) 

또는 생성기를 사용하여 redis가로드 될 때까지 "중지"할 수 있습니다.

function*(){ 
    const redisLoaded = yield loadRedis(); 
    //load your module 
} 
관련 문제