Семантика доставки (delivery semantics)

Семантика доставки описывает гарантию, которую система обмена сообщениями даёт относительно того, сколько раз сообщение дойдёт до потребителя: не более одного раза, не менее одного раза или ровно один раз. «Не более одного раза» может терять сообщения, но никогда не дублирует. «Не менее одного раза» никогда не теряет сообщение, но после повтора может доставить его несколько раз. «Ровно один раз» — идеал и самое трудное: каждое сообщение приходит один раз, без потерь и дублей. На практике большинство очередей и потоков (SQS, Kafka, RabbitMQ) по умолчанию дают «не менее одного раза», потому что гарантировать отсутствие потерь проще, чем отсутствие дублей. Настоящее «ровно один раз» обычно не сквозная магия; это доставка «не менее одного раза» плюс идемпотентные потребители, дедуплицирующие по ключу сообщения. Для SaaS-разработчиков этот выбор определяет корректность во всём, что списывает деньги или меняет состояние. На практике: считайте, что доставка «не менее одного раза», и делайте обработчики идемпотентными — храните ID обработанного сообщения или используйте upsert, — чтобы повторно доставленное событие «списать карту» не выставило счёт дважды.

Похожие термины

Ещё термины: Данные и инфраструктура