Introduction

This page identifies material showing BizTalk implementations of the integration patterns described in the book "Enterprise Integration Patterns." This page also shows Other Patterns Implemented by BizTalk.

Use the links only as guide. If you find a better article than the ones listed, then please add it.

Pattern Description BizTalk implementations
Patterns in the book: Enterprise Integration Patterns
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
(a.k.a. Punch Out)
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?
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?
  • MSDN - This is the pattern of determining the destination address as well as the transport protocol based on the result of message processing. You can use a dynamic send port or a Role Link shape to implement this pattern.
 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? Orchestrations
Debatching (Receive Adapters or Pipeline) Recoverable Interchange Processing - For an interchange (debatched messages from a pipeline), BizTalk allows the option to fail the whole interchange or process just the non-errored single messages.
 Aggregator How do we combine the results of individual, but related messages so that they can be processed as a whole?
 Resequencer               (see also: Ordered Delivery 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
(a.k.a. hub-and-spoke)
How can you decouple the destination of a message from the sender and maintain central control over the flow of messages?
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
(see also: Handling large messages)
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?
Messaging Endpoints
 Messaging Gateway How do you encapsulate access to the messaging system from the rest of the application?  
 Messaging Mapper
(see also: Message Translator)
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? Many BizTalk receive adapters are natively polling based (File, FTP, database adapters). Most database adapters will include a 'Poll while data found' property, so that, if data was found, they will immediately call again for the next batch of data rather than wait for the next time increment to pass.
 Event-Driven Consumer
(a.k.a. Observer)
How can an application automatically consume messages as they become available?
(provide a mechanism to allow objects to subscribe dynamically to state change notifications from another object.)
Complex Event Processing
 Competing Consumers How can a messaging client process multiple messages concurrently? (consumers compete with each other to be the receiver).  
 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? Send port subscriptions.
 Durable Subscriber
(see also: Suspend with Retry)
How can a subscriber avoid missing messages while it’s not listening for them?

Many send adapters support retry functionality. See also: Suspend with Retry pattern. Messages will be suspended allowing administrator to resume instances.

  Idempotent Receiver How can a message receiver deal with duplicate messages?
  • CloudCasts: Alan Smith - AppFabric Duplicate Message Detection
  • Ideally, the target system can identify and handle (discard) duplicates. Where not possible, I've seen the Idempotent checker pattern implemented in BizTalk using a custom pipeline component. This component stores message identifier information in a custom database. If the same identifier is received, then the message is rejected.
 Service Activator How can an application design a service to be invoked both via various messaging technologies and via non-messaging techniques?  
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?
  • MSDN - The VETRO pattern is a common composite pattern that combines multiple actions taken on a message when it is received. The term VETRO is an acronym that stands for Validate, Enrich, Transform, Route, Operate. In the Microsoft BizTalk ESB Toolkit, these actions can be handled as individual stages in the pipeline associated with the receive location.
 Wire Tap
(see also: Archive)
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
(see aslo: Audit)
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 Use a Test Message to assure the health of message processing components.
 Channel Purger How can you keep 'left-over' messages on a channel from disturbing tests or running systems?
Other Patterns Implemented in BizTalk
Convoys
  Parallel Convoy Enables multiple single messages to join together to achieve a required result. The set of related messages can arrive in any order, but BizTalk Server must receive all of them before starting the process.
Parallel Convoy supporting the following requirements:
  • Set a configurable timeout for the convoy.
  • Access received messages in the exception handler.
  • Kapil Chadha - To avoid the problems described here. The pattern uses a custom pipeline that wraps the incoming message. In the wrapper message header, information is added including a correlation id (promoted) and message type (distinguished field - so the messages can be cast back to their original type in the orchestration).
  Sequential Convoy Enables multiple single messages to join together to achieve a required result. A sequential convoy is a set of related messages that have a predefined order. Although the messages do not have to be exactly the same, BizTalk Server must receive them in a sequential order.
  Looping Convoy Similar to the Message Sequence pattern, but where the order of the related message parts is not important. The source sends message segments which we needed to build up into a whole message and send on to the target. The source segments would be arriving in any order, and the sequence wasn't important – each would contain just one part of the whole message.
Advanced Mapping Patterns
  Muenchian Grouping and Sorting How can we group and sort the elements in an Xml document?
  Cross Reference Data How can we translate reference data identifier (code/key) values between systems?
Timed Patterns
  Scheduled Task Trigger a process which needs to be scheduled at specific times.
  Service Window Specify the dates when you want the receive location to start and stop processing messages. You can also specify certain times of the day during which you want the receive location to process messages.
  Notification of missing expected events Notifications of interfaces that have not taken place by the expected times.
BPM Scenarios
  Throttling Limit the number of concurrent calls to a service.
  Interrupter Using the interrupt mechanism enables you to halt order processing when an order is updated or cancelled.
  Signal File

Only process a particular file after receiving the related "trigger", "signal" or "control" file.

SOA Scenarios
  Ordered Delivery
(see also: FIFO)
Ordered message delivery ensures that messages that are published to the MessageBox database in a given order are delivered to each matching subscriber in the same order in which they were published to the message box.
  First In First Out (FIFO)  
Archive and Audit
  Archive Capture a copy of received or sent messages (can be used for re-submission purposes). 
  Audit Capture reportable information at defined points in a integration process. 
Exception Handling
  Suspend with Retry Enables the orchestration to suspend a message when there is an error. The suspension occurs within a loop so that the orchestration suspends, asks for intervention, and then retries the operation a fixed number of times.
  Exception Catch Block Allows you to designate automated handling of messaging failures as an alternative to the default behavior of placing failed messages in the Suspended queue.
  Compensation Block perform compensation on transactions that have been committed.
  Fault Subscriber Subscribe to all port and orchestration unhandled exceptions to implement a common support process.
  Repair and Resubmit The Repair and Resubmit pattern defines a solution in which a service is unable to process a message and needs to gracefully externalize its state in the form of the failed message, enabling the message content to be available for repair and then resubmit it to a service to continue processing the message.
Notifications\Acknowlegements
  Delivery Notification

Get notification\acknowledgement that a send adapter has successfully transmitted a message.

Large Messages
  Handling Large Messages Process an XML document that contains a base64 encoded document (e.g. image or pdf). In most cases there is no actual need for the base64 encoded document to travel along with its XML container message through BizTalk. Use a receive pipeline components to store the document to temporary store, then use a send pipeline to load the document back in to the sent message.
  Handling Extremely Large Messages
Other Patterns
  Message Construction Creation of a message within BizTalk.
  Calling Pipelines from Orchestrations allows the reuse of pipelines and helps maintain the decoupling of an orchestration from the pipeline stages.

See Also

Read suggested related articles:
Another important place to find a huge amount of BizTalk related articles is the TechNet Wiki itself. The best entry point is BizTalk Server Resources on the TechNet Wiki.