2016-08-13 9 views
0

В настоящее время я пытаюсь использовать Node.js Kue для обработки заданий в очереди, но я считаю, что я не делаю это правильно.Как подождать подключение Redis?

Действительно, как я сейчас работаю, у меня есть две разные службы (которые в этом случае я работаю с Docker Compose): один веб-API, построенный с помощью Express, отправляет задания в очередь и один модуль обработки. Проблема здесь в модуле обработки.

Я закодировал следующим образом:

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 доступны перед тем запуска этого модуля. Если мы запустим это без того, что Redis уже доступен, он сработает, потому что хост недоступен и завершает процесс.

  2. Если Redis внезапно становится недоступным, модуль обработки также выходит из строя, потому что он не может установить соединение, и процесс будет убит.

Как я могу избежать этих проблем?

Моя догадка заключается в том, что я должен каким-то образом сделать код «ожидающим» для Redis, но я понятия не имею, как это сделать.

Как это можно сделать в этом случае?

ответ

0

Вы можете использовать обещание подождать, пока не будет загружен redis. Затем запустите свой модуль.

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

Или вы можете использовать генератор для «остановки», пока не будет загружен redis.

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