0

我目前正在尝试使用 Node.js Kue 来处理队列中的作业,但我相信我做得不对。

事实上,按照我现在的工作方式,我有两种不同的服务(在这种情况下,我使用 Docker Compose 运行):一个使用 Express 构建的 Web 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...
});

当我们使用 Node 运行它时,它会坐在那里等待将事物放入队列中以进行处理。

然而有两个问题:

  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 回答