0

現在、キュー内のジョブを処理するために Node.js Kue を使用しようとしていますが、正しく行っていないと思います。

実際、私が現在取り組んでいる方法では、2 つの異なるサービス (この場合は Docker Compose で実行しています) があります。Express で構築された Web API の 1 つはジョブをキューに送信し、もう 1 つは処理モジュールです。ここでの問題は、処理モジュールにあります。

次のようにコーディングしました。

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

Node でこれを実行すると、処理を実行するためにキューに置かれるのを待っています。

ただし、次の 2 つの問題があります。

  1. このモジュールを実行する前に、Redis が利用可能である必要があります。Redis をまだ利用できない状態でこれを実行すると、ホストにアクセスできないためにクラッシュし、プロセスが終了します。

  2. Redis が突然使用できなくなった場合、接続を確立できず、プロセスが強制終了されるため、処理モジュールもクラッシュします。

これらの問題を回避するにはどうすればよいですか?

私の推測では、どうにかしてコードを Redis を「待機」させる必要がありますが、これを行う方法がわかりません。

この場合、これはどのように行うことができますか?

4

1 に答える 1

0

promise を使用して、redis が読み込まれるまで待機できます。次に、モジュールを実行します。

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

または、ジェネレーターを使用して、redis が読み込まれるまで「停止」することもできます。

function*(){
  const redisLoaded = yield loadRedis();
  //load your module
}
于 2016-08-13T04:07:51.940 に答える