Skip to main content

EIP

This document was generated using AI assistance

Content may include inaccuracies, outdated information, or technical errors. Users are advised to cross-check critical information before implementation.

The notation describes messaging between applications: the endpoints that produce and consume messages, the channels that carry them, and the routers, transformers and control elements in between.

An EIP diagram: an endpoint, the channel it publishes to and the adapter that reads from it

Create the model

Create a model Notification Delivery System of the type EnterpriseIntegrationModel (EIP) and open its diagram.

The root of the model is an EnterpriseIntegrationModel. The notation has one connection type: Flow.

Taking events in

  1. Create an Endpoint Application (Order Service).
  2. Create a Channel Incoming Events Topic (Kafka).
  3. Create a ChannelAdapter Input Adapter and turn on its Backward attribute - the adapter reads events from the topic.

Draw a Flow from the endpoint to the topic and from the topic to the adapter.

Audit and duplicates

Create a WireTap Audit Log with a DataStore Audit DB, and a MessageFilter Deduplication Filter with a DataStore Redis Cache.

Chain them: adapter → wire tap → filter. Add a flow from the wire tap to the audit store and from the filter to the cache - the filter needs somewhere to keep the messages it has already handled.

Enrichment and routing

An order event does not carry the notification channel, so the message is enriched before routing. Create a ContentEnricher Preference Enricher with a DataStore User Profile DB.

Create a Router Content-Based Router and three channels: SMS Queue, Email Queue, Push Queue. Draw a flow from the router to each channel and name the flows SMS, Email and Push.

Delivery

All three branches are built the same way. For SMS: SMS QueueFilter SMS ThrottlerFilter SMS Circuit BreakerService SMS Sender (Twilio). Build the email and push branches the same way.

For redelivery, create a DeadLetterChannel Retry Queue and draw a flow into it from every circuit breaker. Then create a PollingConsumer Retry Job: it reads the queue and returns messages to the router.

The table

Open the model as Enterprise Integration Model Table. Every endpoint, channel, processor and store takes its own row. The table makes it easier to check that every branch ends in a sender and every branch has a redelivery path.