The post has been translated automatically. Original language: Russian
On September 14, 2026, RabbitMQ 4.3.6 was released, the accompanying release of branch 4.3. It contains fixes in the server kernel, command—line utilities, and almost all popular plugins, as well as several new settings for those who keep the broker under load. The minimum version of Erlang/OTP is the same — 27.0, nodes do not start on older releases.
Server core: queues, exchangers, and protocol errors
The most notable correction concerns quorum queues: when agreeing on the membership, the broker could add more replicas than the target group size. For a cluster, this is not cosmetics — an extra quorum member changes the majority arithmetic and the resource consumption for replication.
The second group of edits is around deleting schema objects: the removal of bindings when deleting exchangers has been put in order, as well as the behavior of auto—deleted exchangers, clearing temporary queues and deleting virtual hosts.
A separate class of errors has been closed, in which incorrect client data dropped not the operation, but the connection. Incorrect message identifiers and correlations in the URN UUID format are now rejected, rather than leading to an exception when converting the format. Operations on a queue of an unknown type return the standard precondition_failed error instead of abruptly closing the channel. "Double counting" of links in the message store has also been fixed when restoring classic queues, and re-declaring a stream with an equivalently recorded duration (for example, "1D" and "24h") no longer leads to a precondition failure. Direct connections finally respect the channel_max_per_node limit in the same way as network connections.
New settings and management of interceptors
The channel_tx_message_max parameter has been added with a default value of 10,000. It limits the number of messages that the AMQP 0-9-1 channel accumulates in the transaction buffer. Setting listeners.startup_delay delays the launch of client listeners for a set number of seconds: the node has time to recover before connections rush to it.
Channel interceptors can now be attached to the same operation in multiple instances, and the order can be prioritized. The commands rabbitmqctl list_channel_interceptors and rabbitmqctl set_channel_interceptor_priories have been added to work with them in runtime.
Plugins: MQTT, STOMP, Shovel, LDAP, node discovery
MQTT has added storage limits for retained messages per virtual host: 100,000 messages and 1 GiB by default. The STOMP plugin now respects the expiration date of credentials, including OAuth 2 tokens, along with other protocols. Shovel has fixed local carriers with the src-delete-after restriction and added the customize_hostname_check parameter for certificates with a wildcard in the name. In the LDAP backend, logging in by DOMAIN\username is working again. Node discovery via Consul repeats the request upon a 404 response, rather than interrupting node loading.
What does this mean in practice?
If you have a cluster on quorum queues, it makes sense to recalculate the actual group membership after the update and compare it with the target one: the extra replicas typed before the update will not disappear on their own. The new channel_tx_message_max limit is a potential surprise for rare but live scenarios where the AMQP 0-9-1 transaction is used to batch tens of thousands of messages: such a code will hit the limit and require either splitting into bundles or explicitly increasing the value. Similarly, it is worth looking at the volume of retained MQTT messages in advance - the new limits apply to each virtual host.
A useful little thing for operation is the delayed start of listeners: when a node in the cluster is restarted, it removes the surge of connections arriving earlier than the node is ready to serve them. And a reminder: the 4.3 branch requires Erlang/OTP at least 27.0, and when upgrading from versions up to 4.3.0, the authors recommend reading the 4.3.0 release notes in their entirety first.
The draft text was prepared with the participation of AI, the facts were checked against the original source — official notes for the release of RabbitMQ 4.3.6 on GitHub.
14 сентября 2026 года вышел RabbitMQ 4.3.6 — сопровождающий выпуск ветки 4.3. В нём собраны исправления в ядре сервера, в утилитах командной строки и почти во всех популярных плагинах, а также несколько новых настроек для тех, кто держит брокер под нагрузкой. Минимальная версия Erlang/OTP прежняя — 27.0, на более старых выпусках узлы не стартуют.
Ядро сервера: очереди, обменники и протокольные ошибки
Самое заметное исправление касается quorum-очередей: при согласовании состава участников брокер мог добавлять больше реплик, чем задано целевым размером группы. Для кластера это не косметика — лишний участник кворума меняет арифметику большинства и расход ресурсов на репликацию.
Вторая группа правок — вокруг удаления объектов схемы: приведено в порядок удаление привязок при удалении обменников, а заодно поведение автоудаляемых обменников, очистка временных очередей и удаление виртуальных хостов.
Отдельно закрыт класс ошибок, при которых некорректные данные клиента роняли не операцию, а соединение. Некорректные идентификаторы сообщений и корреляции в формате URN UUID теперь отвергаются, а не приводят к исключению при конвертации формата. Операции над очередью неизвестного типа возвращают штатную ошибку precondition_failed вместо резкого закрытия канала. Также исправлен двойной подсчёт ссылок в хранилище сообщений при восстановлении классических очередей, а повторное объявление потока с эквивалентно записанной длительностью (например, «1D» и «24h») больше не приводит к отказу по предусловию. Прямые соединения наконец соблюдают лимит channel_max_per_node так же, как сетевые.
Новые настройки и управление перехватчиками
Появился параметр channel_tx_message_max со значением по умолчанию 10 000 — он ограничивает число сообщений, которые канал AMQP 0-9-1 накапливает в буфере транзакции. Настройка listeners.startup_delay откладывает запуск клиентских слушателей на заданное число секунд: узел успевает прийти в себя до того, как на него хлынут подключения.
Перехватчики каналов теперь можно навешивать на одну и ту же операцию в нескольких экземплярах, а порядок задавать приоритетами; для работы с ними в рантайме добавлены команды rabbitmqctl list_channel_interceptors и rabbitmqctl set_channel_interceptor_priorities.
Плагины: MQTT, STOMP, Shovel, LDAP, обнаружение узлов
В MQTT добавлены лимиты хранилища retained-сообщений на виртуальный хост: по умолчанию 100 000 сообщений и 1 ГиБ. Плагин STOMP теперь соблюдает срок годности учётных данных, в том числе токенов OAuth 2, наравне с остальными протоколами. В Shovel починены локальные перевозчики с ограничением src-delete-after и добавлен параметр customize_hostname_check для сертификатов с подстановочным знаком в имени. В LDAP-бэкенде вход по именам вида DOMAIN\username снова работает. Обнаружение узлов через Consul при ответе 404 повторяет запрос, а не обрывает загрузку узла.
Что это значит на практике
Если у вас кластер на quorum-очередях, после обновления имеет смысл пересчитать фактический состав участников групп и сравнить с целевым: лишние реплики, набранные до обновления, сами не исчезнут. Новый лимит channel_tx_message_max — потенциальный сюрприз для редких, но живых сценариев, где транзакция AMQP 0-9-1 используется для пакетной заливки десятков тысяч сообщений: такой код упрётся в предел и потребует либо разбиения на пачки, либо явного увеличения значения. Аналогично стоит заранее посмотреть на объём retained-сообщений MQTT — новые лимиты применяются к каждому виртуальному хосту.
Полезная мелочь для эксплуатации — отложенный старт слушателей: при перезапуске узла в кластере он снимает всплеск подключений, прилетающих раньше, чем узел готов их обслуживать. И напоминание: ветка 4.3 требует Erlang/OTP не ниже 27.0, а при переходе с версий до 4.3.0 авторы советуют сначала прочитать заметки к выпуску 4.3.0 целиком.
Черновик текста подготовлен с участием ИИ, факты сверены с первоисточником — официальные заметки к выпуску RabbitMQ 4.3.6 на GitHub.