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