RabbitMQ,NodeJS,Express内部服务器错误

时间:2015-05-24 09:21:15

标签: node.js rabbitmq

任何人都知道为什么这不起作用。这些代码片段来自示例。我没有堆栈跟踪向您显示我的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);

1 个答案:

答案 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);