Перейти к основному содержимому

EIP

Этот документ был подготовлен при помощи ИИ

Текст может содержать неточности, устаревшие данные или технические ошибки. Пожалуйста, проверяйте критически важную информацию перед использованием.

Нотация описывает обмен сообщениями между приложениями: конечные точки, которые порождают и потребляют сообщения, каналы, по которым сообщения передаются, и маршрутизаторы, преобразователи и управляющие элементы между ними.

Диаграмма EIP: конечная точка, канал, куда она публикует сообщения, и адаптер, который их читает

Создайте модель

Создайте модель Notification Delivery System типа EnterpriseIntegrationModel (EIP) и откройте её диаграмму.

Корень модели — EnterpriseIntegrationModel. Тип соединения в нотации один: Flow.

Приём событий

  1. Создайте Endpoint Application (Order Service).
  2. Создайте Channel Incoming Events Topic (Kafka).
  3. Создайте ChannelAdapter Input Adapter и включите ему атрибут Backward — адаптер читает события из топика.

Проведите Flow от конечной точки к топику и от топика к адаптеру.

Аудит и дубликаты

Создайте WireTap Audit Log с хранилищем DataStore Audit DB и MessageFilter Deduplication Filter с хранилищем DataStore Redis Cache.

Соедините их в цепочку: адаптер → ответвление → фильтр. Добавьте поток от ответвления к хранилищу аудита и от фильтра к кэшу — фильтру нужно где-то хранить уже обработанные сообщения.

Обогащение и маршрутизация

Событие заказа не содержит способа уведомления, поэтому перед маршрутизацией сообщение обогащают. Создайте ContentEnricher Preference Enricher с хранилищем DataStore User Profile DB.

Создайте Router Content-Based Router и три канала: SMS Queue, Email Queue, Push Queue. Проведите поток от маршрутизатора к каждому каналу и назовите потоки SMS, Email и Push.

Доставка

Все три ветви устроены одинаково. Для SMS: SMS QueueFilter SMS ThrottlerFilter SMS Circuit BreakerService SMS Sender (Twilio). Постройте так же ветви для писем и push-сообщений.

Для повторной отправки создайте DeadLetterChannel Retry Queue и проведите в него поток от каждого предохранителя. Затем создайте PollingConsumer Retry Job: он читает очередь и возвращает сообщения маршрутизатору.

Таблица

Откройте модель как Enterprise Integration Model Table. Каждая конечная точка, канал, обработчик и хранилище займут отдельную строку. По таблице проще проверить, что каждая ветвь заканчивается отправителем и у каждой есть путь повторной отправки.