Wiki Markup |
---|
h2. Enterprise Integration Patterns |
...
Camel supports most of the [Enterprise Integration Patterns|http://www.enterpriseintegrationpatterns.com/toc.html] from the excellent book by [Gregor Hohpe|http://www.amazon.com/exec/obidos/search-handle-url/105-9796798-8100401?%5Fencoding=UTF8&search-type=ss&index=books&field-author=Gregor%20Hohpe] and [Bobby Woolf |
...
If you are new to Camel you might want to try the Getting Started in the User Guide before attempting to implement these patterns.
The EIP icons library is available as a Visio stencil file adapted to render the icons with the Camel color : sand. Here is the link to download them for your presentation, functional and technical documents.
...
Messaging Systems
| How does one application communicate with another using messaging? | |
| How can two applications connected by a message channel exchange a piece of information? | |
| How can we perform complex processing on a message while maintaining independence and flexibility? | |
| How can you decouple individual processing steps so that messages can be passed to different filters depending on a set of conditions? | |
| How can systems using different data formats communicate with each other using messaging? | |
| How does an application connect to a messaging channel to send and receive messages? |
Messaging Channels
| How can the caller be sure that exactly one receiver will receive the document or perform the call? | |
| How can the sender broadcast an event to all interested receivers? | |
| What will the messaging system do with a message it cannot deliver? | |
| How can the sender make sure that a message will be delivered, even if the messaging system fails? | |
| What is an architecture that enables separate applications to work together, but in a de-coupled fashion such that applications can be easily added or removed without affecting the others? |
Message Construction
| How can messaging be used to transmit events from one application to another? | |
| When an application sends a message, how can it get a response from the receiver? | |
| How does a requestor that has received a reply know which request this is the reply for? |
Message Routing
| How do we handle a situation where the implementation of a single logical function (e.g., inventory check) is spread across multiple physical systems? | |
| How can a component avoid receiving uninteresting messages? | |
| How can you avoid the dependency of the router on all possible destinations while maintaining its efficiency? | |
| How do we route a message to a list of (static or dynamically) specified recipients? | |
| How can we process a message if it contains multiple elements, each of which may have to be processed in a different way? | |
| How do we combine the results of individual, but related messages so that they can be processed as a whole? | |
| How can we get a stream of related but out-of-sequence messages back into the correct order? | |
| How can you maintain the overall message flow when processing a message consisting of multiple elements, each of which may require different processing? | |
| 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? | |
| 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? | |
| How can I throttle messages to ensure that a specific endpoint does not get overloaded, or we don't exceed an agreed SLA with some external service? | |
| How can I delay the sending of a message? | |
| How can I balance load across a number of endpoints? | |
| How can I route a message to a number of endpoints at the same time? | |
| How can I repeat processing a message in a loop? |
Message Transformation
| How do we communicate with another system if the message originator does not have all the required data items available? | |
| How do you simplify dealing with a large message, when you are interested only in a few data items? | |
| How can we reduce the data volume of message sent across the system without sacrificing information content? | |
| How do you process messages that are semantically equivalent, but arrive in a different format? | |
| How can I sort the body of a message? |
Messaging Endpoints
| How do you move data between domain objects and the messaging infrastructure while keeping the two independent of each other? | |
| How can an application automatically consume messages as they become available? | |
| How can an application consume a message when the application is ready? | |
| How can a messaging client process multiple messages concurrently? | |
| How can multiple consumers on a single channel coordinate their message processing? | |
| How can a message consumer select which messages it wishes to receive? | |
| How can a subscriber avoid missing messages while it's not listening for them? | |
| How can a message receiver deal with duplicate messages? | |
| How can a client control its transactions with the messaging system? | |
| How do you encapsulate access to the messaging system from the rest of the application? | |
| How can an application design a service to be invoked both via various messaging technologies and via non-messaging techniques? |
System Management
...
...
...
How can you route a message through intermediate steps to perform validation, testing or debugging functions?
...
...
...
|http://www.amazon.com/exec/obidos/search-handle-url/105-9796798-8100401?%5Fencoding=UTF8&search-type=ss&index=books&field-author=Bobby%20Woolf].
If you are new to Camel you might want to try the [Getting Started] in the [User Guide] before attempting to implement these patterns.
The EIP icons library is available as a Visio stencil file adapted to render the icons with the Camel color : sand. Here is the [link|{attachment:Hohpe_EIP_camel.zip}] to download them for your presentation, functional and technical documents.
{excerpt}
h3. Messaging Systems
| !http://www.enterpriseintegrationpatterns.com/img/ChannelIcon.gif! | [Message Channel] | How does one application communicate with another using messaging? |
| !http://www.enterpriseintegrationpatterns.com/img/MessageIcon.gif! | [Message] | How can two applications connected by a message channel exchange a piece of information? |
| !http://www.enterpriseintegrationpatterns.com/img/PipesAndFiltersIcon.gif! | [Pipes and Filters] | How can we perform complex processing on a message while maintaining independence and flexibility? |
| !http://www.enterpriseintegrationpatterns.com/img/ContentBasedRouterIcon.gif! | [Message Router] | How can you decouple individual processing steps so that messages can be passed to different filters depending on a set of conditions? |
| !http://www.enterpriseintegrationpatterns.com/img/MessageTranslatorIcon.gif! | [Message Translator] | How can systems using different data formats communicate with each other using messaging? |
| !http://www.enterpriseintegrationpatterns.com/img/MessageEndpointIcon.gif! | [Message Endpoint] | How does an application connect to a messaging channel to send and receive messages? |
h3. Messaging Channels
| !http://www.enterpriseintegrationpatterns.com/img/PointToPointIcon.gif! | [Point to Point Channel] | How can the caller be sure that exactly one receiver will receive the document or perform the call? |
| !http://www.enterpriseintegrationpatterns.com/img/PublishSubscribeIcon.gif! | [Publish Subscribe Channel] | How can the sender broadcast an event to all interested receivers? |
| !http://www.enterpriseintegrationpatterns.com/img/DeadLetterChannelIcon.gif! | [Dead Letter Channel] | What will the messaging system do with a message it cannot deliver? |
| !http://www.enterpriseintegrationpatterns.com/img/GuaranteedMessagingIcon.gif! | [Guaranteed Delivery] | How can the sender make sure that a message will be delivered, even if the messaging system fails? |
| !http://www.enterpriseintegrationpatterns.com/img/MessageBusIcon.gif! | [Message Bus] | What is an architecture that enables separate applications to work together, but in a de-coupled fashion such that applications can be easily added or removed without affecting the others? |
h3. Message Construction
| !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/CorrelationIdentifierIcon.gif! | [Correlation Identifier] | How does a requestor that has received a reply know which request this is the reply for? |
h3. Message Routing
| !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? |
| !http://www.enterpriseintegrationpatterns.com/img/RecipientListIcon.gif! | [Recipient List] | How do we route a message to a list of (static or 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? |
| !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] | 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? |
| !http://cwiki.apache.org/confluence/download/attachments/49204/clear.png! | [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://cwiki.apache.org/confluence/download/attachments/49204/clear.png! | [Throttler] | How can I throttle messages to ensure that a specific endpoint does not get overloaded, or we don't exceed an agreed SLA with some external service? |
| !http://cwiki.apache.org/confluence/download/attachments/49204/clear.png! | [Delayer] | How can I delay the sending of a message? |
| !http://cwiki.apache.org/confluence/download/attachments/49204/clear.png! | [Load Balancer] | How can I balance load across a number of endpoints? |
| !http://cwiki.apache.org/confluence/download/attachments/49204/clear.png! | [Multicast] | How can I route a message to a number of endpoints at the same time? |
| !http://cwiki.apache.org/confluence/download/attachments/49204/clear.png! | [Loop] | How can I repeat processing a message in a loop? |
h3. Message Transformation
| !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] | 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? |
| !http://cwiki.apache.org/confluence/download/attachments/49204/clear.png! | [Sort] | How can I sort the body of a message? |
h3. Messaging Endpoints
| !http://cwiki.apache.org/confluence/download/attachments/49204/clear.png! | [Messaging Mapper] | How do you move data between domain objects and the messaging infrastructure while keeping the two independent of each other? |
| !http://www.enterpriseintegrationpatterns.com/img/EventDrivenConsumerIcon.gif! | [Event Driven Consumer] | How can an application automatically consume messages as they become available? |
| !http://www.enterpriseintegrationpatterns.com/img/PollingConsumerIcon.gif! | [Polling Consumer] | How can an application consume a message when the application is ready? |
| !http://www.enterpriseintegrationpatterns.com/img/CompetingConsumersIcon.gif! | [Competing Consumers] | How can a messaging client process multiple messages concurrently? |
| !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? |
| !http://www.enterpriseintegrationpatterns.com/img/DurableSubscriptionIcon.gif! | [Durable Subscriber] | How can a subscriber avoid missing messages while it's not listening for them? |
| !http://cwiki.apache.org/confluence/download/attachments/49204/clear.png! | [Idempotent Consumer] | How can a message receiver deal with duplicate messages? |
| !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/MessagingGatewayIcon.gif! | [Messaging Gateway] | How do you encapsulate access to the messaging system from the rest of the application? |
| !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? |
h3. System Management
| !http://www.enterpriseintegrationpatterns.com/img/DetourIcon.gif! | [Detour] | How can you route a message through intermediate steps to perform validation, testing or debugging functions? |
| !http://www.enterpriseintegrationpatterns.com/img/WireTapIcon.gif! | [Wire Tap] | How do you inspect messages that travel on a point-to-point channel? |
{excerpt} |