queue-priority

<domain>

Приоритет этой очереди при конкуренции за соединения
в конфигурации это строкаqueue-priority 50внутри блока <domain>
Кто кого прерывает, когда соединений не хватает

Умолчание — 50, ровно середина шкалы.

Работает так: MTA нужно доставить письма очереди, а свободных соединений нет. Тогда он ищет подключённую очередь с меньшим приоритетом и прерывает столько её соединений, сколько нужно, — начиная с самых низкоприоритетных и поднимаясь вверх.

То есть число решает не «кого обслужить первым» вообще, а у кого можно отобрать соединение, когда их не хватает.

Шкала: раздел директивы называет диапазон от 0 (низший) до 100 (высший); раздел про приоритеты — от 1 до 100. Расхождение в одно значение.

Ту же строку раньше звали иначе: delivery-priority объявлена устаревшей в пользу этой.

Главная ловушка — приоритет проявляется только при нехватке. Пока свободных соединений хватает всем, число не делает ничего: никто ни у кого ничего не отбирает. Настроив приоритеты на спокойном узле и не увидев разницы, легко решить, что строка не работает.

Вторая половина — прерывание не бесплатно. Отобранное соединение это оборванная работа: приёмник видит разрыв, и повторное подключение стоит времени и на вашей, и на его стороне. Частые перестановки приоритетов на загруженном узле дают больше обрывов, чем пользы.

Что делает Хаб. Не пишет — все очереди остаются с вендорскими пятьюдесятью, то есть равными.

Срочное и массовое Хаб разводит иначе: отдельными адресами отправки. У прогрева свой поток со своими пределами, у рассылки свой — они не конкурируют за одни и те же соединения и потому не нуждаются в приоритетах.

Рекомендуемые значения

Что ставить. Числа имеют смысл только относительно друг друга:

Значение Когда
50 (умолчание) обычная почта — все очереди равны
выше 50 направление, которое не должно ждать: подтверждения, сбросы паролей
ниже 50 массовая рассылка, которой можно уступить

Разводить стоит заметно, а не на единицы: разница между 50 и 55 не даст ничего осмысленного, а между 25 и 75 — даст. И помнить, что нулём пользоваться не стоит: про него руководство говорит двумя голосами.

Умолчание 50, правило прерывания снизу вверх и диапазон от нуля — из руководства, § 3.3.10.14. Диапазон от единицы — § 11.9.1. Совет разводить заметно наш.
Пример в конфигурации
# подтверждения не должны ждать за рассылкой
<domain someplace.com>
    queue-priority 75</domain>

<virtual-mta newsletter>
    <domain someplaceelse.com>
        queue-priority 30
    </domain>
</virtual-mta>
Приоритет задаётся и внутри потока отправки — тогда он касается только той очереди, что этим потоком идёт.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается3 ошибки▶

Проверяют приоритеты на спокойном узле

§ 3.3.10.14

Чем чреватоПока соединений хватает всем, приоритет не делает ничего. Настройка выглядит нерабочей, и её начинают менять наугад.
Как заметитьПриоритеты заданы, поведение очередей не изменилось.
Как правильноПроверять под нагрузкой, близкой к общему потолку исходящих соединений.

Разводят приоритеты на единицы

наш опыт

Чем чреватоРазница между 50 и 55 не даёт осмысленного порядка: прерывание всё равно начинается с самых низких, и промежуток в пять единиц ничего не меняет.
Как заметитьПриоритеты заданы, а порядок обслуживания очередей прежний.
Как правильноРазводить заметно — например 25, 50, 75.

Забывают, что прерывание рвёт соединение

наш опыт

Чем чреватоОтобранное соединение — оборванная работа. Приёмник видит разрыв, повторное подключение стоит времени обеим сторонам, и частые перестановки дают больше обрывов, чем пользы.
Как заметитьЧисло соединений к приёмникам растёт, доставка не ускоряется.
Как правильноРазводить приоритеты редко и крупно, а не подстраивать их постоянно.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
queue-priority <integer>
Значения
целое от 0 до 100; раздел про приоритеты называет диапазон от 1
Умолчание
50 § 3.3.10.14
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Директива живёт в <domain> и подчиняется слиянию блоков получателей: более узкий блок перекрывает более широкий. Задать её можно и внутри потока отправки — тогда речь об очереди «этот домен через этот поток», а не о домене вообще.
Как проверить на узле
Приоритеты видно в конфигурации, следствие — в состоянии очередей:
grep -n 'queue-priority' /etc/pmta/config /etc/pmta/virtualhost.txt
pmta show queues --connected=yes --maxitems=20
Разница проявляется только при нехватке соединений. На спокойном узле обе очереди получат сколько нужно, и приоритет не проявится никак.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Настроить темп под провайдера