| 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.
|