Skip to content

Enterprise Integration Patterns with WSO2 Micro Integrator

Enterprise Application Integration (EAI) is key to connecting business applications with heterogeneous systems. Over the years, architects of integration solutions have invented their own blend of patterns in a variety of ways. However, most of these architectures have similarities, initiating a set of widely-accepted standards in architecting integration patterns. Most of these standards are described in the Enterprise Integration Patterns Catalog.

In this guide, we have shown how each pattern in the Patterns Catalog can be simulated using various constructs in WSO2 Micro Integrator (MI). Click on a topic in the list below for details.

Messaging Systems

Message Channels channels How one application communicates with another using messaging.
Message message How two applications connected by a message channel exchange a piece of information.
Pipes and Filters pipes-and-filters How to perform complex processing on a message while maintaining independence and flexibility.
Message Router content-based-router How to decouple individual processing steps so that messages can be passed to different filters depending on conditions.
Message Translator message-translator How systems using different data formats communicate with each other using messaging.
Message Endpoint message-endpoint How an application connects to a messaging channel to send and receive messages.

Messaging Channels

Point-to-Point Channel point-to-point How the caller can be sure that exactly one receiver will receive the document or perform the call.
Publish-Subscribe Channel publish-subscribe How the sender broadcasts an event to all interested receivers.
Datatype Channel datatype-channel How the application sends a data item such that the receiver will know how to process it.
Invalid Message Channel invalid-message-channel How a messaging receiver gracefully handles a message that makes no sense.
Dead Letter Channel dead-letter-channel What the messaging system does with a message it cannot deliver.
Guaranteed Delivery guaranteed-messaging How the sender ensures delivery of a message, even if the messaging system fails.
Channel Adapter channel-adapter How to connect an application to the messaging system to send/receive messages.
Messaging Bridge messaging-bridge How multiple messaging systems can be connected so that messages available on one are also available on the others.
Message Bus message-bus An architecture enabling separate applications to work together in a decoupled fashion such that applications can be easily added or removed without affecting the others.

Message Construction

Command Message command-message How messaging can be used to invoke a procedure in another application.
Document Message document-message How messaging can be used to transfer data between applications.
Event Message event-message How messaging can be used to transmit events from one application to another.
Request-Reply request-reply How an application that sends a message gets a response from the receiver.
Return Address return-address How a replier knows where to send the reply.
Correlation Identifier correlation-identifier How a requester that has received a reply knows which request the reply is for.
Message Sequence message-sequence How messaging can transmit an arbitrarily large amount of data.
Message Expiration message-expiration How a sender indicates when a message should be considered stale and therefore should not be processed.
Format Indicator How a message’s data format can be designed to allow for possible future changes.

Message Routing

Content-Based Router content-based-router How to handle a situation when the implementation of a single logical function (such as an inventory check) is spread across multiple physical systems.
Message Filter message-filter How a component avoids receiving uninteresting messages.
Dynamic Router dynamic-router How to avoid the dependency of a router in all possible destinations, while maintaining its efficiency.
Recipient List recipient-list How to route a message to a list of dynamically specified recipients.
Splitter splitter How to process a message if it contains multiple elements, each of which may have to be processed in a different way.
Aggregator aggregator How to combine the results of individual but related messages so that they can be processed as a whole.
Composed Message Processor distribution-aggregate How to maintain the overall flow when processing a message consisting of multiple elements, each of which may require different processing.
Scatter-Gather Scatter-Gather How to maintain the overall flow when a message needs to be sent to multiple recipients, each of which may send a reply.
Routing Slip routing-table How to route a message consecutively through a series of steps when the sequence of the steps is not known at design time and may vary for each message.
Process Manager process-manager How to route a message through multiple processing steps, when the required steps may not be known at design time and may not be sequential.
Message Broker message-broker How to decouple the destination of a message from the sender and maintain central control over the flow of messages.

Message Transformation

Envelope Wrapper envelope-wrapper How existing systems participate in a messaging exchange, which places specific requirements in the message format, such as message header fields or encryption.
Content Enricher data-enricher How to communicate with another system if the message originator does not have all the required data items available.
Content Filter content-filter How to simplify dealing with a large message when you are interested only in a few data items.
Claim Check store-in-library How to reduce the data volume of a message sent across the system without sacrificing information content.
Normalizer normalizer How to process messages that are semantically equivalent but arrive in a different format.
Canonical Data Model How to minimize dependencies when integrating applications that use different data formats.

Messaging Endpoints

Messaging Gateway messaging-gateway How to encapsulate access to the messaging system from the rest of the application.
Messaging Mapper How to move data between domain objects and the messaging infrastructure, while keeping the two independent of each other.
Transactional Client transactional-client How a client controls its transactions with the messaging system.
Polling Consumer polling-consumer How an application consumes a message when the application is ready.
Event-Driven Consumer event-driven-consumer How an application automatically consumes messages as they become available.
Competing Consumers competing-consumers How a messaging client processes multiple messages concurrently.
Message Dispatcher message-dispatcher How multiple consumers on a single channel coordinate their message processing.
Selective Consumer message-selector How a message consumer selects which messages to receive.
Durable Subscriber durable-subscription How a subscriber avoids missing messages while it is not listening for them.
Service Activator messaging-adapter How an application designs a service to be invoked via both messaging and non-messaging techniques.