在nodejs应用程序中实例化兔子和redis的正确方法

时间:2015-10-23 17:19:27

标签: node.js redis rabbitmq

我正在构建一个nodejs应用程序而不是http将使用rabbitMq和Redis作为与外界通信的方式。

我可以找到许多关于如何实例化其中一个的例子但是,在真正的应用程序工作开始之前,打开两个连接并等待两者准备就绪的正确方法是什么?

你可以从这些问题中看出我是新手;)

编辑:代码示例,以便于理解

var amqp = require('amqplib/callback_api');
var redis = require('redis');

var clientRedis = redis.createClient(redisPort, ipQueue, {});

clientRedis.on('connect', function () {
    console.log('Redis connected.');
    connectQueue();
});

function connectQueue() {
    amqp.connect("amqp://" + ipQueue, function (err, conn) {
        console.log("Test app started...");
        if (err != null) { bail(err); }
        conn.createChannel(function (err, ch) {
            if (err != null) console.log("ERRROR:" + err);
            ch.assertQueue(QueueInstructionsSet, { durable: false });
            workers.startWorkers(4);
            channel = ch;
        });
    });
}

1 个答案:

答案 0 :(得分:0)

从我的角度来看,我认为这不应该成为应用程序的一部分。 因为如果要检查redis是否有效或者RabbitMQ是否在您的计算机上工作,当您将应用程序移动到一台服务器时,这个检查可能无法正常工作。

此服务是您的应用程序的独立服务,如果您的应用程序崩溃,因为其中一项服务已关闭,那就是预期的。

我在项目中使用Redis和RabbitMQ的目的相同,我可以向你解释我的工作。

对于redis 我使用此npm package。使用起来非常清楚。 您只需确保在运行应用程序时运行Redis服务器。

对于rabbitMQ 我使用自己的npm包nibi。它也适用于亚马逊队列。我创建这个库是因为当我开始使用nodeJs时,我找不到使用队列的简单方法。 同样,您只需确保在运行应用程序时运行RabbitMQ服务器。

修改

如果你真的需要在运行你的应用程序之前做一些cheks,你可以使用 prestart and start script使用npm。 你的package.json很容易做到这样:

"scripts": {
  "prestart": "node ./check-your-enviroment.js",
  "start": "node ./index.js"
}

因此,当您使用npm start运行应用程序时,请运行您的"检查程序"首先然后运行主程序。