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