2016-08-13 5 views
0

Ich versuche gerade, Node.js Kue für die Verarbeitung von Jobs in einer Warteschlange zu verwenden, aber ich glaube, ich mache es nicht richtig.Wie man auf eine Redis-Verbindung wartet?

In der Tat, wie ich jetzt arbeite, habe ich zwei verschiedene Dienste (die in diesem Fall mit Docker Compose ausgeführt werden): eine Web-API mit Express erstellt mit Jobs in die Warteschlange und ein Verarbeitungsmodul. Das Problem hier ist mit dem Verarbeitungsmodul.

ich es codiert haben, wie folgt:

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... 
}); 

Wenn wir führen dies mit Knoten, es sitzt für Dinge da und wartet auf die Warteschlange gestellt werden, um die Verarbeitung zu tun.

Es gibt zwei Probleme jedoch:

  1. Es muss, dass Redis vor läuft dieses Modul zur Verfügung. Wenn wir dies ohne Redis bereits ausführen, stürzt es ab, weil der Host nicht erreichbar ist und beendet den Prozess.

  2. Wenn Redis plötzlich nicht mehr verfügbar ist, stürzt das Verarbeitungsmodul ebenfalls ab, da die Verbindung nicht hergestellt werden kann und der Prozess beendet wird.

Wie kann ich diese Probleme vermeiden?

Meine Vermutung ist, dass ich irgendwie den Code "warten" sollte für Redis, aber ich habe keine Ahnung, wie dies zu tun ist.

Wie kann das in diesem Fall gemacht werden?

Antwort

0

Sie können versprechen zu warten, bis redis geladen wird. Dann führe dein Modul aus.

Oder Sie können Generator verwenden, um "zu stoppen", bis redis geladen wird.

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