Исключение RabbitMQ frame_too_large - PullRequest
0 голосов
/ 12 июня 2018

Я опубликовал сообщение в очереди, и потребитель, как ожидается, не сможет проанализировать сообщение и поместить его в DLQ, но сообщение застрянет в состоянии Unacked.Исключение, которое я вижу:

ОШИБКА: #method (код ответа = 501, текст ответа = FRAME_ERROR - тип 2, все октеты = << >>: {frame_too_large, 206219,131064}, class-id = 0, method-id = 0)

Сообщение на самом деле меньше размера кадра по умолчанию, но увеличивается до такого большого размера, когда пытается сбросить его в DLQ.RabbitMQ настроен по умолчанию frame_max = 131072.Если его значение больше 206219, то оно работает нормально и успешно отправляется в DLQ.Не уверен, вычисляет ли он размер сообщения, включая выброшенное исключение и другие метаданные, которые заканчиваются ошибкой frame_too_large.

Лучше ли увеличить frame_max?или какой может быть лучший подход?

1 Ответ

0 голосов
/ 21 июня 2018

Из этой проблемы .

Первое, что я подозреваю, это то, что свойства или заголовки сообщения (а не содержимого) кодируются с большим, чем 4k,поскольку AMQP не предусматривает фрагментации чего-либо, кроме содержимого сообщения.Возможно ли это в вашем приложении?

Итак, поскольку трассировка стека очень велика;Вы можете либо уменьшить размер трассировки стека (перехватывая исключение в своем коде и выбрасывая новое с достаточным количеством информации - но не добавляя причину), либо вы можете увеличить frame_max.

Клиент запрашиваетдля 0 (неограниченно), но у брокера по умолчанию установлен предел 131072.

Документация здесь .

Максимально допустимый размер кадра (в байтах)вести переговоры с клиентами.Установка в 0 означает «неограниченно», но вызовет ошибку в некоторых клиентах QPid.Установка большего значения может улучшить пропускную способность;установка меньшего значения может улучшить задержку.

По умолчанию: 131072

Мы можем рассмотреть усечение трассировки стека, я открыл здесь проблему .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...