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

RabbitMQ, NodeJS, Express internal server errror

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

Amqplib 提供两个并行客户端 API。一个使用承诺,另一个使用回调。你可以自由选择你喜欢的,它们不会混在一起——promise API 中的一个通道只有基于 promise 的方法,同样回调 API。

基于promise的API是库中的"main"模块:

var amqp = require('amqplib');

您可以通过以下方式访问基于回调的API:

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

在发件人代码中,您还混合了amqp lib方法。即 ready 事件。坚持使用一个图书馆和 API's。

这与发件人的代码相同

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