EIPs
Camel supports most of the Enterprise Integration Patterns from the excellent book by Gregor Hohpe and Bobby Woolf.
| If you come from an AI, data engineering, or modern distributed systems background, see AI Patterns for a mapping of common terms like fan-out, scatter-gather, and retry to the corresponding Camel EIPs. |
Messaging Systems
|
|
How does one application communicate with another using messaging? |
|
|
|
How can two applications be 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? |
|
|
|
How can you connect an application to the messaging system so that it can send and receive messages? |
|
|
|
How can multiple messaging systems be connected so that messages available on one are also available on the others? |
|
|
|
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? |
|
|
|
Data synchronization by capturing changes made to a database, and apply those changes to another system. |
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 replier know where to send the reply? |
|
|
|
How does a requestor that has received a reply know which request this is the reply for? |
|
|
|
How can a sender indicate when a message should be considered stale and thus shouldn’t be processed? |
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 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 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? |
|
|
|
How can you decouple the destination of a message from the sender and maintain central control over the flow of messages? |
|
|
|
How can I route a message to a number of endpoints at the same time? |
|
|
|
How can I balance load across a number of endpoints? |
|
|
|
How can I call Kamelets (route templates)? |
|
|
How can I sample one message out of many in a given period to avoid downstream route does not get overloaded? |
Load Balancing Strategies
|
|
Tries the next endpoint in case of failure. |
|
|
|
Distributes messages across endpoints in a round robin fashion. |
|
|
|
Distributes messages across endpoints randomly. |
|
|
|
Distributes messages across endpoints using weighted ratios. |
|
|
|
Routes messages to the same endpoint based on a correlation expression. |
|
|
|
Sends the message to all endpoints (like a topic). |
|
|
|
Uses a custom load balancing implementation. |
Splitting and Aggregation
|
|
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? |
Message Transformation
|
|
How do we communicate with another system if the message originator does not have all the required data items available? |
|
|
|
Enriches the message with data from a secondary resource using a request-reply pattern. |
|
|
|
Enriches the message with data obtained by polling a consumer endpoint. |
|
|
|
Polls a message from an endpoint for later use in the routing. |
|
|
|
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 a 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? |
|
|
|
How do I execute a script which may not change the message? |
|
|
|
How can I validate a message? |
Message Data Manipulation
|
|
Sets the message body to the result of an expression. |
|
|
|
Sets a single message header to the result of an expression. |
|
|
|
Sets multiple message headers at the same time. |
|
|
|
Sets an exchange property to the result of an expression. |
|
|
|
Sets a variable to the result of an expression. |
|
|
|
Sets multiple variables at the same time. |
|
|
|
Removes a single message header by name. |
|
|
|
Removes message headers matching a pattern. |
|
|
|
Removes a single exchange property by name. |
|
|
|
Removes exchange properties matching a pattern. |
|
|
|
Removes a variable by name. |
|
|
|
Converts the message body to another type. |
|
|
|
Converts a message header to another type. |
|
|
|
Converts a variable to another type. |
|
|
|
Transforms the message body based on an expression and stops further routing. |
|
|
|
Transforms the message between named data types. |
|
|
|
Marshals the message body into a binary or textual format using a data format. |
|
|
|
Unmarshals the message body from a binary or textual format using a data format. |
Endpoints and Invocation
|
|
Defines the consumer endpoint that acts as the input source for a route. |
|
|
|
Sends the message to a fixed endpoint URI. |
|
|
|
Sends the message to an endpoint URI computed dynamically from an expression. |
|
|
|
Invokes a method on a Java bean with automatic parameter binding. |
|
|
|
Invokes a custom Camel Processor for programmatic message processing. |
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 message receiver resume from the last known offset? |
|
|
|
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? |
Flow Control
|
|
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 repeat processing a message in a loop? |
|
|
|
How can I stop to continue routing a message? |
|
|
|
How can I decouple the continued routing of a message from the current thread? |
Error Handling and Resilience
|
|
How can I stop calling an external service if the service is broken? |
|
|
|
Defines the fallback route that executes when the Circuit Breaker trips or the primary route fails. |
|
|
|
How can I define a series of related actions in a Camel route that should be either completed successfully (all of them) or not-executed/compensated? |
|
|
|
How can I throw an exception during routing? |
|
|
|
Marks the current exchange for rollback, typically used with transactions. |
System Management
|
|
How can we effectively administer a messaging system distributed across multiple platforms and a wide geographic area? |
|
|
|
How can you route a message through intermediate steps to perform validation, testing or debugging functions? |
|
|
|
How do you inspect messages that travel on a point-to-point channel? |
|
|
|
How can we effectively analyze and debug the flow of messages in a loosely coupled system? |
|
|
|
How can I log processing a message? |
|
|
|
Groups together a set of EIPs into a composite logical unit for metrics and monitoring. |