我使用node-amqp连接到RabbitMQ。设置如下:
关闭消息"传入"很好,写入数据库等都可行,但是当发布到" 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
标志似乎无效,因为永远不会调用确认回调。这意味着我无法在发布新消息之前等待消息确认。
我无法解决问题所在,因为错误信息有点神秘。这可能与尝试同时发布很多东西(几乎)有关,但如果没有确认回调,我就无法阻止这种情况......