Integration patterns play a crucial role in building robust and scalable integration solutions. In this section, we will explore some of the most commonly used integration patterns and how they can be implemented using Apache Camel. These patterns provide solutions to common integration challenges and enable seamless communication between different systems.

2.1 Message Routing Pattern:
The Message Routing pattern is used to determine the path of a message based on certain conditions. It allows messages to be sent to different destinations depending on their content or attributes. Apache Camel provides a powerful routing engine that makes it easy to implement message routing.

Example code:

Java
from("direct:input")
.choice()
.when(header("category").isEqualTo("books"))
.to("direct:books")
.when(header("category").isEqualTo("electronics"))
.to("direct:electronics")
.otherwise()
.to("direct:other");

In the above code, we define a route that reads messages from the “direct:input” endpoint and uses a choice statement to route messages based on their category header. Messages with the category “books” are sent to the “direct:books” endpoint, messages with the category “electronics” are sent to the “direct:electronics” endpoint, and all other messages are sent to the “direct:other” endpoint.

2.2 Message Transformation Pattern:
The Message Transformation pattern is used to convert the format or structure of a message. It allows messages to be transformed from one representation to another, enabling interoperability between systems with different data formats. Apache Camel provides various transformation capabilities, such as data mapping, JSON/XML conversion, and content enrichment.

Example code:

Java
from("direct:input")
.transform(body().convertToString())
.to("log:transformedPayload");

In the above code, we transform the message payload by converting it to a string representation using the transform method. The transformed payload is then logged using the log endpoint.

2.3 Message Splitter Pattern:
The Message Splitter pattern is used to split a message into multiple parts, allowing individual processing of each part. This pattern is useful when dealing with large datasets or when parallel processing is required. Apache Camel provides a splitter component that simplifies the implementation of message splitting.

Example code:

Java
from("file:data/orders")
.split(body().tokenize("\n"))
.to("direct:processOrder");

In the above code, we read messages from a file endpoint and split them into individual lines using the split method. Each line is then processed separately by sending it to the “direct:processOrder” endpoint.

2.4 Message Aggregator Pattern:
The Message Aggregator pattern is used to combine multiple related messages into a single message. It allows you to aggregate data from different sources or assemble a complete response from multiple service invocations. Apache Camel provides an aggregator component that simplifies the implementation of message aggregation.

Example code:

Java
from("direct:input")
.aggregate(header("orderId"), new MyAggregationStrategy())
.completionSize(10)
.to("direct:output");

In the above code, we define a route that reads messages from the “direct:input” endpoint and aggregates them based on the orderId header. The MyAggregationStrategy class defines the logic for combining the messages. The aggregation is completed once 10 messages with the same orderId have been received, and the aggregated message is then sent to the “direct:output” endpoint.

These are just a few examples of common integration patterns that can be implemented using Apache Camel. By leveraging these patterns, you can build robust and scalable integration solutions that seamlessly connect different systems. In the next sections, we will explore more advanced integration patterns and their practical use cases.