Felpfe Inc.
Search
Close this search box.
call 24/7

+484 237-1364‬

Search
Close this search box.

Working with Route Conditions and Predicates

Introduction:
In this section, we will explore how to work with route conditions and predicates in Apache Camel. Route conditions and predicates allow you to define logic and rules for message routing within your Camel routes. By using conditions and predicates, you can dynamically route messages based on various criteria, such as message content, headers, or external factors. Let’s delve into the details of working with route conditions and predicates with code samples.

2.4.1 Route Conditions:
Route conditions determine whether a message should be routed to a specific endpoint based on certain criteria. Camel provides various options to define route conditions. Let’s explore some commonly used route condition options:

2.4.1.1 Simple Language:
The Simple language provides a concise and expressive way to define route conditions based on message content, headers, or properties.

Java
from("file:data/inbox")
.choice()
.when().simple("${body} contains 'important'")
.to("activemq:importantQueue")
.otherwise()
.to("activemq:regularQueue");

In this example, the when().simple("${body} contains 'important'") condition checks if the message body contains the word ‘important’. If true, the message is routed to the “importantQueue” endpoint; otherwise, it is routed to the “regularQueue” endpoint.

2.4.1.2 Header Conditions:
You can also use header values as route conditions to make routing decisions based on specific header values.

Java
from("activemq:myQueue")
.choice()
.when().header("priority").isEqualTo("high")
.to("activemq:highPriorityQueue")
.otherwise()
.to("activemq:lowPriorityQueue");

In this example, the when().header("priority").isEqualTo("high") condition checks if the “priority” header is set to “high”. If true, the message is routed to the “highPriorityQueue”; otherwise, it is routed to the “lowPriorityQueue”.

2.4.2 Predicates:
Predicates are powerful expressions that allow you to define complex conditions using Java or other languages supported by Camel. Predicates can be used within route conditions to make routing decisions based on custom logic. Let’s explore some examples:

2.4.2.1 Custom Predicate:
You can define custom predicates by implementing the Predicate interface and overriding the matches method.

Java
public class MyPredicate implements Predicate {
@Override
public boolean matches(Exchange exchange) {
String body = exchange.getIn().getBody(String.class);
return body.length() > 100;
}
}

// Usage:
from("file:data/inbox")
.filter().method(new MyPredicate())
.to("activemq:largeMessages");

In this example, the MyPredicate class implements the Predicate interface, and the matches method checks if the message body length is greater than 100. If true, the message is routed to the “largeMessages” endpoint.

2.4.2.2 Language Predicate:
Camel supports various languages, such as JavaScript, Groovy, or XPath, for defining predicates.

Java
from("file:data/inbox")
.filter().language("groovy").expression("body.startsWith('A')")
.to("activemq:aMessages");

In this example, the Groovy language is used to define the predicate. The expression("body.startsWith('A')") condition checks if the message body starts with the letter ‘A’. If true, the message is routed to the “aMessages” endpoint.

Conclusion:
In this section, we explored how to work with route conditions and predicates in Apache Camel. Route conditions allow you to make routing decisions based on specific criteria, such as message content or headers. We learned about using the Simple language and header conditions to define route conditions. Additionally, we explored predicates as a powerful way to define complex routing logic using custom Java predicates or languages supported by Camel. Understanding and utilizing route conditions and predicates provide you with the flexibility to dynamically route messages based on various factors, enhancing the capabilities of your integration solutions. In the next section, we will focus on error handling and fault tolerance techniques in Apache Camel.

Leave a Reply

About Author
Ozzie Feliciano CTO @ Felpfe Inc.

Ozzie Feliciano is a highly experienced technologist with a remarkable twenty-three years of expertise in the technology industry.

kafka-logo-tall-apache-kafka-fel
Stream Dream: Diving into Kafka Streams
In “Stream Dream: Diving into Kafka Streams,”...
ksql
Talking in Streams: KSQL for the SQL Lovers
“Talking in Streams: KSQL for the SQL Lovers”...
spring_cloud
Stream Symphony: Real-time Wizardry with Spring Cloud Stream Orchestration
Description: The blog post, “Stream Symphony:...
1_GVb-mYlEyq_L35dg7TEN2w
Kafka Chronicles: Saga of Resilient Microservices Communication with Spring Cloud Stream
“Kafka Chronicles: Saga of Resilient Microservices...
kafka-logo-tall-apache-kafka-fel
Tackling Security in Kafka: A Comprehensive Guide on Authentication and Authorization
As the usage of Apache Kafka continues to grow in organizations...
1 2 3 58
90's, 2000's and Today's Hits
Decades of Hits, One Station

Listen to the greatest hits of the 90s, 2000s and Today. Now on TuneIn. Listen while you code.