| Messaging Patterns Overview | |
| Table of Contents |
Detailed table of contents.
|
| Preface | |
| Introduction | |
| Solving Integration Problems using Patterns | |
Integration Styles |
| Introduction to Integration Styles | |
| File Transfer | How can I integrate multiple applications so that they work together and can exchange information? |
| Shared Database | How can I integrate multiple applications so that they work together and can exchange information? |
| Remote Procedure Invocation | How can I integrate multiple applications so that they work together and can exchange information? |
| Messaging | How can I integrate multiple applications so that they work together and can exchange information? |
Messaging Systems |
| Introduction to Messaging Systems | |
| Message Channel | How does one application communicate with another using messaging? |
| Message | How can two applications connected by a message channel exchange a piece of information? |
| Pipes and Filters |
How can we perform complex processing on a message while maintaining independence and flexibility?
|
| Message Router | How can you decouple individual processing steps so that messages can be passed to different filters depending on a set of conditions? |
| Message Translator |
How can systems using different data formats communicate with each other using messaging?
|
| Message Endpoint | How does an application connect to a messaging channel to send and receive messages? |
Messaging Channels |
| Introduction to Messaging Channels | |
| Point-to-Point Channel | How can the caller be sure that exactly one receiver will receive the document or perform the call? |
| Publish-Subscribe Channel | How can the sender broadcast an event to all interested receivers? |
| Datatype Channel | How can the application send a data item such that the receiver will know how to process it? |
| Invalid Message Channel | How can a messaging receiver gracefully handle receiving a message that makes no sense? |
| Dead Letter Channel | What will the messaging system do with a message it cannot deliver? |
| Guaranteed Delivery | How can the sender make sure that a message will be delivered, even if the messaging system fails? |
| Channel Adapter | How can you connect an application to the messaging system so that it can send and receive messages? |
| Messaging Bridge | How can multiple messaging systems be connected so that messages available on one are also available on the others? |
| Message Bus | What is an architecture that enables separate applications to work together, but in a decoupled fashion such that applications can be easily added or removed without affecting the others? |
Message Construction |
| Introduction to Message Construction | |
| Command Message | How can messaging be used to invoke a procedure in another application? |
| Document Message | How can messaging be used to transfer data between applications? |
| Event Message | How can messaging be used to transmit events from one application to another? |
| Request-Reply | When an application sends a message, how can it get a response from the receiver? |
| Return Address | How does a replier know where to send the reply? |
| Correlation Identifier | How does a requestor that has received a reply know which request this is the reply for? |
| Message Sequence | How can messaging transmit an arbitrarily large amount of data? |
| Message Expiration | How can a sender indicate when a message should be considered stale and thus shouldn’t be processed? |
| Format Indicator | How can a message’s data format be designed to allow for possible future changes? |
Interlude: Simple Messaging |
| Introduction to Simple Messaging Examples | |
| JMS Request/Reply Example | |
| .NET Request/Reply Example | |
| JMS Publish/Subscribe Example | |
Message Routing |
| Introduction to Message Routing | |
| Content-Based Router |
How do we handle a situation where the implementation of a single logical function (e.g., inventory check) is spread across multiple physical systems?
|
| Message Filter | How can a component avoid receiving uninteresting messages? |
| Dynamic Router | How can you avoid the dependency of the router on all possible destinations while maintaining its efficiency? |
| Recipient List | How do we route a message to a list of dynamically specified recipients? |
| Splitter |
How can we process a message if it contains multiple elements, each of which may have to be processed in a different way?
|
| Aggregator |
How do we combine the results of individual, but related messages so that they can be processed as a whole?
|
| Resequencer | How can we get a stream of related but out-of-sequence messages back into the correct order? |
| Composed Message Processor |
How can you maintain the overall message flow when processing a message consisting of multiple elements, each of which may require different processing?
|
| Scatter-Gather |
How do you maintain the overall message flow when a message needs to be sent to multiple recipients, each of which may send a reply?
|
| Routing Slip |
How do we route a message consecutively through a series of processing steps when the sequence of steps is not known at design-time and may vary for each message?
|
| Process Manager | How do we 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 | How can you decouple the destination of a message from the sender and maintain central control over the flow of messages? |
Message Transformation |
| Introduction to Message Transformation | |
| Envelope Wrapper |
How can existing systems participate in a messaging exchange that places specific requirements on the message format, such as message header fields or encryption?
|
| Content Enricher |
How do we communicate with another system if the message originator does not have all the required data items available?
|
| Content Filter |
How do you simplify dealing with a large message, when you are interested only in a few data items?
|
| Claim Check |
How can we reduce the data volume of message sent across the system without sacrificing information content?
|
| Normalizer | How do you process messages that are semantically equivalent, but arrive in a different format? |
| Canonical Data Model | How can you minimize dependencies when integrating applications that use different data formats? |
Interlude: Composed Messaging |
| Introduction to Composed Messaging Examples | |
| Synchronous Implementation using Web Services | |
| Asynchronous Implementation with MSMQ | |
| Asynchronous Implementation with TIBCO ActiveEnterprise | |
Messaging Endpoints |
| Introduction to Messaging Endpoints | |
| Messaging Gateway | How do you encapsulate access to the messaging system from the rest of the application? |
| Messaging Mapper | How do you move data between domain objects and the messaging infrastructure while keeping the two independent of each other? |
| Transactional Client | How can a client control its transactions with the messaging system? |
| Polling Consumer | How can an application consume a message when the application is ready? |
| Event-Driven Consumer | How can an application automatically consume messages as they become available? |
| Competing Consumers | How can a messaging client process multiple messages concurrently? |
| Message Dispatcher | How can multiple consumers on a single channel coordinate their message processing? |
| Selective Consumer | How can a message consumer select which messages it wishes to receive? |
| Durable Subscriber | How can a subscriber avoid missing messages while it’s not listening for them? |
| Idempotent Receiver | How can a message receiver deal with duplicate messages? |
| Service Activator | How can an application design a service to be invoked both via various messaging technologies and via non-messaging techniques? |
System Management |
| Introduction to System Management | |
| Control Bus |
How can we effectively administer a messaging system that is distributed across multiple platforms and a wide geographic area?
|
| Detour | How can you route a message through intermediate steps to perform validation, testing or debugging functions? |
| Wire Tap | How do you inspect messages that travel on a point-to-point channel? |
| Message History |
How can we effectively analyze and debug the flow of messages in a loosely coupled system?
|
| Message Store |
How can we report against message information without disturbing the loosely coupled and transient nature of a messaging system?
|
| Smart Proxy | How can you track messages on a service that publishes reply messages to the Return Address specified by the requestor? |
| Test Message |
What happens, though, if a component is actively processing messages, but garbles outgoing messages due to an internal fault?
|
| Channel Purger | How can you keep 'left-over' messages on a channel from disturbing tests or running systems? |
Interlude: Systems Management Example |
| Loan Broker System Management | |
Integration Patterns in Practice |
| Case Study: Bond Trading System | |
Concluding Remarks |
| Emerging Standards and Futures in Enterprise Integration | |
Appendices |
| Bibliography |
Annotated list of references and recommended reading.
|
| Revision History |
Chronological list of changes.
|