RabbitMQ (через node-amqp): необработанная ошибка соединения: UNEXPECTED_FRAME - ожидаемый заголовок содержимого для класса 60, вместо него получен кадр заголовка без содержимого

Я использую node-amqp для подключения к RabbitMQ. Установка выглядит следующим образом:

  • два сервера RabbitMQ (далее "кролики"), один из которых называется "входящий", другой - "уведомитель".
  • Данные публикуются "входящему" кролику, и мое приложение буферизует (приложение "буфер") определенное количество сообщений перед записью их в базу данных.
  • Затем буфер пытается опубликовать эти сообщения кролику-уведомителю, который предназначен для уведомления других частей системы (например, пользовательского интерфейса).

Удаление сообщений из "входящих" - это нормально, запись в базу данных и т. Д. - все работает, но когда дело доходит до публикации в "уведомителе", я получаю следующую ошибку после попытки опубликовать первую пару сообщений:

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 ответов

Другие вопросы по тегам