Технологии
Статья
Канал «точка-точка»: одна задача - один обработчик
Как распределять сообщения между исполнителями и почему доставка одному получателю ещё не означает обработку «ровно один раз».
Представим очередь заданий на формирование накладных. Обработчиков несколько, но каждую задачу нужно передать одному из них. Для этого подходит канал «точка-точка» - Point-to-Point Channel.
В рамках одной доставки сообщение получает один потребитель канала. Это может быть единственный обработчик или один из нескольких, работающих с общей очередью.
Как распределяется работа
Обработчики конкурируют за сообщения из одного канала. Например, три экземпляра сервиса могут разбирать общую очередь накладных, распределяя работу между собой. Конкретный способ распределения зависит от системы обмена и её настроек.
Этот паттерн описывает доставку сообщений. Его не следует путать с набором прямых интеграций, в котором каждое приложение отдельно соединено с остальными.
Почему возможны повторы
Получатель может выполнить операцию, но не успеть подтвердить её до разрыва соединения. Если инфраструктура не получила подтверждение, она может доставить сообщение повторно - в том числе другому обработчику.
Поэтому канал «точка-точка» сам по себе не обеспечивает выполнение операции «ровно один раз». Для защиты от повторного действия используют идентификаторы сообщений, проверку уже выполненных операций и идемпотентную обработку: повторный запрос не должен повторно создавать тот же бизнес-результат.
Что важно предусмотреть
Подтверждать сообщение после успешного выполнения нужной операции.
Задать интервалы и пределы повторных попыток.
Направлять необрабатываемые сообщения на отдельный разбор.
Проверить требования к порядку: параллельные обработчики могут завершать задачи в разной последовательности.
Канал подходит для распределения заданий между исполнителями. Если одно событие должны независимо обработать склад, аналитика и сервис уведомлений, понадобится публикация-подписка.