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 Queue → Filter SMS Throttler → Filter SMS Circuit Breaker → Service 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.