任何人都知道为什么这不起作用。这些代码片段来自示例。我没有堆栈跟踪向您显示我的NodeJS调试技能目前是垃圾。任何帮助将不胜感激。
注意我确实运行了RabbitMQ服务器并且接收器已经能够连接。
var amqp = require('amqplib');
var when = require('when');
var rabbitmq_conn = amqp.connect('amqp://localhost' );
function push_keystroke_data(session_id, data) {
var QUEUE_NAME = 'hello';
var msg = session_id;
//1
rabbitmq_conn.on('ready',
function () {
rabbitmq_conn.createChannel(
function(err, ch) {
ch.assertQueue(QUEUE_NAME, {
exclusive: true,
durable: true
}, function(err, ok) {
}
);
}
);
}
);
//2
when(rabbitmq_conn.createChannel()).then(function(ch) {
var ok = ch.assertQueue(QUEUE_NAME, {durable: false});
ok.then(function(_qok) {
ch.sendToQueue(QUEUE_NAME, new Buffer(msg));
console.log(" [x] Sent '%s'", msg);
ch.close();
});
}).ensure(function() {
conn.close();
});
}
这是接收者代码:
var amqp = require('amqplib');
amqp.connect('amqp://localhost').then(function(conn) {
process.once('SIGINT', function() { conn.close(); });
return conn.createChannel().then(function(ch) {
var QUEUE_NAME = 'hello';
var ok = ch.assertQueue(QUEUE_NAME, {durable: false});
ok = ok.then(function(_qok) {
return ch.consume(QUEUE_NAME, function(msg) {
console.log(" [x] Received '%s'", msg.content.toString());
}, {noAck: true});
});
return ok.then(function(_consumeOk) {
console.log(' [*] Waiting for messages. To exit press CTRL+C');
});
});
}).then(null, console.warn);
答案 0 :(得分:0)
Amqplib提供两个并行客户端API。一个使用promises,另一个使用回调。你可以自由选择你喜欢的,它们不会混合 - 来自promises API的通道只有基于promise的方法,同样还有回调API。
基于承诺的API是" main"库中的模块:
var amqp = require('amqplib');
您可以通过以下方式访问基于回调的API:
var amqp = require('amqplib/callback_api');
在发件人代码中,您还混合了amqp lib方法。即准备事件。坚持使用一个库和API。
这与发件人的代码相同
var amqp = require('amqplib');
var when = require('when');
amqp.connect('amqp://localhost').then(function(conn) {
return when(conn.createChannel().then(function(ch) {
var q = 'hello';
var msg = 'Hello World!';
var ok = ch.assertQueue(q, {durable: false});
return ok.then(function(_qok) {
ch.sendToQueue(q, new Buffer(msg));
console.log(" [x] Sent '%s'", msg);
return ch.close();
});
})).ensure(function() { conn.close(); });;
}).then(null, console.warn);