node.js - 如何等待 Redis 连接?

标签 node.js redis queue kue

我目前正在尝试使用 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突然不可用,处理模块也会因为无法建立连接而崩溃,进程被kill。

如何避免这些问题?

我的猜测是我应该以某种方式让代码“等待”Redis,但我不知道该怎么做。

在这种情况下如何做到这一点?

最佳答案

您可以使用 promise 等待 redis 加载完成。然后运行您的模块。

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

或者您可以使用生成器“停止”,直到加载 redis。

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

关于node.js - 如何等待 Redis 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38928926/

相关文章:

javascript - http-proxy 总是挂掉

node.js - 跨环境/dist/index.js :42 unexpected token }

mysql - Magento2 With Redis,错误:MySQL适配器:缺少必需的配置选项 'host'(有时)

redis - JedisCluster无法使用密码连接到redis集群

Linux/unix sleep 命令 : How do I check the time remaining for queued processes in a task manager such as 'top' ?

javascript - NodeJS 与 Java RESTful 后端?

node.js - 如何为 ElasticBeanStalk 中托管的 NodeJs 应用程序指定端口?

apache-kafka - 事件溯源是基于编排的 SAGA 模式的增强模式吗?

c++ - 在数组中插入多个元素——计时函数

c# - 带有 Reactive Extension 和事务 ODP.NET 的 Oracle AQ 回调