Как результаты доставки уходят с узла MailerQ проверенокритично
Результаты публикуются в очереди брокера и уносятся тем, кто прочитал первым, — то есть сбор разрушающий, единоличный и обязательный.
Подробно
Из того, что используются очереди, а не журнал и не веб-хук, следуют три свойства, и все три определяют, как обязан вести себя Хаб. Разрушающее чтение. Потребитель забирает сообщение. Ни курсора, чтобы отмотать назад, ни второй копии нет, поэтому сборщик, упавший между чтением и сохранением, эти события теряет. Хаб подтверждает каждое сообщение по отдельности после разбора — размен одного потерянного события на то, чтобы никогда не получить тысячи повторов. Исключительное чтение. Кто читает, тот единственный и видит. Приложение клиента, читающее ту же очередь, незаметно поделит картину между собой и нами. Либо Хаб — единственный потребитель, либо MTA задают отдельные имена очередей. Читать обязательно. Эти очереди никто не подчищает. Не читать их — не нейтральный выбор: хвост растёт, пока брокеру не станет плохо. Ловушка, в которую мы попали, стоит того, чтобы записать её как часть механизма, а не как происшествие. Адрес брокера в конфигурации узла записан с точки зрения самого узла — localhost, когда брокер на той же машине, — и сборщик, работающий в другом месте, обязан перевести это в адрес узла, прежде чем подключаться. Так упал бы каждый узел MailerQ; просто до сих пор ни одного не было.