0

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

  • 两台 RabbitMQ 服务器(以下称为“兔子”),一台称为“传入”,另一台称为“通知程序”。
  • 数据发布到“传入”兔子,我的应用程序缓冲(“缓冲区”应用程序)一定数量的消息,然后再将它们写入数据库。
  • 然后缓冲区尝试将这些消息发布到“通知程序”兔子,该兔子旨在通知系统的其他部分(如 UI)。

从“传入”中提取消息很好,并且写入数据库等一切正常,但是在发布到“通知程序”时,我在尝试发布前几条消息后收到以下错误:

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 管理界面时,根本没有消息发布到队列中。我尝试将队列类型从更改为fanouttopic但无济于事。此外,该confirm: true标志似乎什么都不做,因为从不调用确认回调。这意味着在发布新消息之前我不能等待消息确认。

我无法弄清楚问题是什么,因为错误消息有点神秘。这可能与尝试(几乎)同时发布许多东西有关,但如果没有确认回调,我无法阻止这种情况发生......

4

0 回答 0