我正在构建一个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;
});
});
}
答案 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运行应用程序时,请运行您的"检查程序"首先然后运行主程序。