官方RabbitMQ Javascript教程显示了amqp.node客户端库
的用法amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
ch.assertQueue(q, {durable: false});
// Note: on Node 6 Buffer.from(msg) should be used
ch.sendToQueue(q, new Buffer('Hello World!'));
console.log(" [x] Sent 'Hello World!'");
});
});
但是,我发现在其他地方重用此代码很困难。特别是,我不知道如何导出通道对象,因为它在回调中。例如,在我的NodeJs / Express App中:
app.post('/posts', (req, res) => {
-- Create a new Post
-- Publish a message saying that a new Post has been created
-- Another 'newsfeed' server consume that message and update the newsfeed table
// How do I reuse the channel 'ch' object from amqp.node here
});
你们对这个有什么指导吗?欢迎其他图书馆的建议(因为我刚开始,易用性是我认为最重要的)
答案 0 :(得分:3)
amqp.node是一个低级API集,可以最小化从AMQP到Node.js的转换。它基本上是一个应该从更友好的API使用的驱动程序。
如果您想要DIY解决方案,请创建一个可以从模块导出的API,并管理该API文件中的连接,通道和其他对象。
但我不建议你自己做。把事情搞定是不容易的。
我建议使用像Rabbot(https://github.com/arobson/rabbot/)这样的库来为你处理这个问题。
我一直在使用Rabbot很长一段时间了,我真的很喜欢它的工作方式。它将AMQP的细节推到了一边,让我专注于我的应用程序的商业价值和我需要的消息模式,以构建特色。
答案 1 :(得分:0)
如评论中所述,您可以使用var onSubmit = function(token) {
document.getElementById("form-signin").submit();
}
公开新创建的频道。当然,每次创建新通道时都会覆盖它,除非您想保留一个通道数组或其他一些数据结构。
假设这是在一个名为module.exports
的脚本中:
channelCreator.js
在您可能想要使用"导出"的脚本中信道:
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
ch.assertQueue(q, {durable: false});
//this is where you can export the channel object
module.exports.channel = ch;
//moved the sending-code to some 'external script'
});
});
希望这有帮助。