RabbitMQ(通过node-amqp):未处理的连接错误:UNEXPECTED_FRAME - 类60的预期内容标题,取而代之的是非内容标题框

时间:2015-03-27 14:08:30

标签: node.js rabbitmq amqp node-amqp

我使用node-amqp连接到RabbitMQ。设置如下:

  • 两个RabbitMQ服务器("兔子"从此以后),一个叫做#34;传入"另一个"通知者"。
  • 数据发布到"传入"兔子和我的应用程序缓冲区("缓冲区"应用程序)在将它们写入数据库之前需要一定数量的消息。
  • 缓冲区然后尝试将这些消息发布到"通知程序" rabbit,用于通知系统的其他部分(如UI)。

关闭消息"传入"很好,写入数据库等都可行,但是当发布到" notifier"尝试发布前几条消息后,我收到以下错误:

Unhandled connection error: UNEXPECTED_FRAME - expected content header for class 60, got non content header frame instead

连接看起来像这样:

self.exchangeOpen = new Promise(function(resolve) {
    var exchangeOptions = {
        type:       'fanout',
        autoDelete: false,
        confirm:    true
    };
    conn.exchange(opts.exchange, exchangeOptions, function(exchange) {
        debug('exchange %s opened', opts.exchange);
        self.exchange = exchange;
        resolve(exchange);
    });
});

(我确实看到交换机已打开消息,因此它确实成功打开了它。)

然后我按照以下方式发布到这个交易所:

publish: function(data) {
    var self = this;

    debug('publishing data');

    return new Promise(function(resolve) {
        self.exchange.publish('', data, { contentType: 'application/json' }, function() {
            debug('data published!');
            resolve(data);
        });
    });
}

一旦将数据写入数据库,就会在循环中调用它。

此错误仅弹出一次,但是当我查看RabbitMQ管理界面时,根本没有消息发布到队列中。我尝试将队列类型从fanout更改为topic,但无济于事。此外,confirm: true标志似乎无效,因为永远不会调用确认回调。这意味着我无法在发布新消息之前等待消息确认。

我无法解决问题所在,因为错误信息有点神秘。这可能与尝试同时发布很多东西(几乎)有关,但如果没有确认回调,我就无法阻止这种情况......

0 个答案:

没有答案