다음을 통해 공유


BizTalk Server: Enterprise Integration Patterns

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
http://www.enterpriseintegrationpatterns.com/img/CommandMessageIcon.gif Command Message How can messaging be used to invoke a procedure in another application?
http://www.enterpriseintegrationpatterns.com/img/DocumentMessageIcon.gif Document Message How can messaging be used to transfer data between applications?
http://www.enterpriseintegrationpatterns.com/img/EventMessageIcon.gif Event Message How can messaging be used to transmit events from one application to another?
http://www.enterpriseintegrationpatterns.com/img/RequestReplyIcon.gif Request-Reply When an application sends a message, how can it get a response from the receiver?
http://www.enterpriseintegrationpatterns.com/img/ReturnAddressIcon.gif Return Address How does a replier know where to send the reply?  
http://www.enterpriseintegrationpatterns.com/img/CorrelationIdentifierIcon.gif Correlation Identifier How does a requestor that has received a reply know which request this is the reply for?
http://www.enterpriseintegrationpatterns.com/img/MessageSequenceIcon.gif Message Sequence How can messaging transmit an arbitrarily large amount of data?
http://www.enterpriseintegrationpatterns.com/img/MessageExpirationIcon.gif 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?
http://www.enterpriseintegrationpatterns.com/img/ContentBasedRouterIcon.gif 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?
http://www.enterpriseintegrationpatterns.com/img/MessageFilterIcon.gif Message Filter How can a component avoid receiving uninteresting messages?
http://www.enterpriseintegrationpatterns.com/img/DynamicRouterIcon.gif 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.
http://www.enterpriseintegrationpatterns.com/img/RecipientListIcon.gif Recipient List How do we route a message to a list of dynamically specified recipients?
http://www.enterpriseintegrationpatterns.com/img/SplitterIcon.gif 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.
http://www.enterpriseintegrationpatterns.com/img/AggregatorIcon.gif Aggregator How do we combine the results of individual, but related messages so that they can be processed as a whole?
http://www.enterpriseintegrationpatterns.com/img/ResequencerIcon.gif Resequencer               (see also: Ordered Delivery How can we get a stream of related but out-of-sequence messages back into the correct order?
http://www.enterpriseintegrationpatterns.com/img/DistributionAggregateIcon.gif 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?
http://www.enterpriseintegrationpatterns.com/img/RoutingTableIcon.gif 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?
http://www.enterpriseintegrationpatterns.com/img/ProcessManagerIcon.gif 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?
http://www.enterpriseintegrationpatterns.com/img/MessageBrokerIcon.gif 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?
http://www.enterpriseintegrationpatterns.com/img/EnvelopeWrapperIcon.gif 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?
http://www.enterpriseintegrationpatterns.com/img/DataEnricherIcon.gif Content Enricher How do we communicate with another system if the message originator does not have all the required data items available?
http://www.enterpriseintegrationpatterns.com/img/ContentFilterIcon.gif 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?
http://www.enterpriseintegrationpatterns.com/img/StoreInLibraryIcon.gif Claim Check How can we reduce the data volume of message sent across the system without sacrificing information content?
http://www.enterpriseintegrationpatterns.com/img/NormalizerIcon.gif 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?
http://www.enterpriseintegrationpatterns.com/img/MessagingGatewayIcon.gif Messaging Gateway How do you encapsulate access to the messaging system from the rest of the application?  
http://www.enterpriseintegrationpatterns.com/img/MessageTranslatorIcon.gif 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?
Dynamic Mapping Resolver
  • MSDN: ESB Toolkit
  • Ronald Lockers : Sending untyped message from an orchestration with map options added to send port bindings.
  • Ed Jones : Within an orchestration selecting map based on BRE selection rules.
  • TechNet Wiki : In a custom pipeline component doing choosing a map using BRE selection rules.
  • Abhilash : Orchestration If shape.
  • Bill Osuch : Orchestration If shape.
Map Chaining
http://www.enterpriseintegrationpatterns.com/img/TransactionalClientIcon.gif Transactional Client How can a client control its transactions with the messaging system?
http://www.enterpriseintegrationpatterns.com/img/PollingConsumerIcon.gif 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.
http://www.enterpriseintegrationpatterns.com/img/EventDrivenConsumerIcon.gif 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
http://www.enterpriseintegrationpatterns.com/img/CompetingConsumersIcon.gif Competing Consumers How can a messaging client process multiple messages concurrently? (consumers compete with each other to be the receiver).  
http://www.enterpriseintegrationpatterns.com/img/MessageDispatcherIcon.gif Message Dispatcher How can multiple consumers on a single channel coordinate their message processing?
http://www.enterpriseintegrationpatterns.com/img/MessageSelectorIcon.gif Selective Consumer How can a message consumer select which messages it wishes to receive? Send port subscriptions.
http://www.enterpriseintegrationpatterns.com/img/DurableSubscriptionIcon.gif 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.
http://www.enterpriseintegrationpatterns.com/img/MessagingAdapterIcon.gif Service Activator How can an application design a service to be invoked both via various messaging technologies and via non-messaging techniques?  
http://www.enterpriseintegrationpatterns.com/img/ControlBusIcon.gif Control Bus How can we effectively administer a messaging system that is distributed across multiple platforms and a wide geographic area?
http://www.enterpriseintegrationpatterns.com/img/DetourIcon.gif 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.
http://www.enterpriseintegrationpatterns.com/img/WireTapIcon.gif 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?
http://www.enterpriseintegrationpatterns.com/img/MessageStoreIcon.gif Message Store

(see aslo: Audit)

How can we report against message information without disturbing the loosely coupled and transient nature of a messaging system?
http://www.enterpriseintegrationpatterns.com/img/SmartProxyIcon.gif Smart Proxy How can you track messages on a service that publishes reply messages to the Return Address specified by the requestor?  
http://www.enterpriseintegrationpatterns.com/img/TestMessageIcon.gif Test Message Use a Test Message to assure the health of message processing components.
http://www.enterpriseintegrationpatterns.com/img/ChannelPurgerIcon.gif Channel Purger How can you keep 'left-over' messages on a channel from disturbing tests or running systems?
  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.
  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?
  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.
  Scheduled Database Aggregator A source system sends messages to BizTalk one record at a time.  However, one of the target systems needs the data submitted on a scheduled basis (e.g. once per day) in a single batched format. Design Summary:
  1. Add an extra send port subscription to the received messages.  This ports saves data to a "holiding data store".  A database table is better than files or queues as the data can be read as a composite message removing any need for orchestration looping map logic. One of the database fields holds the raw xml of the individual message.
  2. Use the schedule task adapter to sends a message with an “aggregate <message type>” instruction.  This triggers an aggregator orchestration.
  3. The Aggregator orchestration calls a database stored procedure to retrieve (and remove) all records as composite message. The orchestration then sends this composite message to the message box for send ports to subscribe to.
De-duplication logic if needed could reside in either: the stored-produced; map called by the orchestration; or send port map.
  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.

  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 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. 
  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 behaviour 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.
  Delivery Notification

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

  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
  Calling Web Services in Large Batches  
  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 an extensive amount of BizTalk related articles is the TechNet Wiki itself. The best entry point is BizTalk Server Resources on the TechNet Wiki.