Defining Camel routes
Camel Quarkus supports several domain specific languages (DSLs) to define Camel Routes.
Java DSL
Extending org.apache.camel.builder.RouteBuilder
and using the fluent builder methods available there is the most common way of defining Camel Routes. Here is an example from the timer-log quickstart:
import org.apache.camel.builder.RouteBuilder;
public class TimerRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("timer:foo?period=1000")
.log("Hello World");
}
}
Endpoint DSL
Since Camel 3.0, you can use fluent builders also for defining Camel endpoints. The following is equivalent with the previous example:
import org.apache.camel.builder.RouteBuilder;
import static org.apache.camel.builder.endpoint.StaticEndpointBuilders.timer;
public class TimerRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from(timer("foo").period(1000))
.log("Hello World");
}
}
Builder methods for all Camel components are available via |
It is also possible to include Java DSL routes from other JARs by adding them as dependencies to your application. When doing this, you must ensure such JARs have a Jandex index, so that the routes are discoverable at build time.
XML DSL
In order to configure Camel routes, rests or templates in XML, you must add a Camel XML parser dependency to the classpath. Since Camel Quarkus 1.8.0, camel-quarkus-xml-io-dsl
is the best choice.
With Camel Main, you can set a property that points to the location of resources XML files such as routes, REST DSL and Route templates:
camel.main.routes-include-pattern = routes/routes.xml, file:src/main/routes/rests.xml, file:src/main/rests/route-template.xml
Path globbing like |
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://camel.apache.org/schema/spring"
xsi:schemaLocation="
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
<route id="xml-route">
<from uri="timer:from-xml?period=1000"/>
<log message="Hello XML!"/>
</route>
</routes>
When using XML routes with beans, it is sometime needed to refer to class name, for instance |
Spring XML with |
The route XML should be in the simplified version like:
<rests xmlns="http://camel.apache.org/schema/spring">
<rest id="greeting" path="/greeting">
<get path="/hello">
<to uri="direct:greet"/>
</get>
</rest>
</rests>
<routeTemplates xmlns="http://camel.apache.org/schema/spring">
<routeTemplate id="myTemplate">
<templateParameter name="name"/>
<templateParameter name="greeting"/>
<templateParameter name="myPeriod" defaultValue="3s"/>
<route>
<from uri="timer:{{name}}?period={{myPeriod}}"/>
<setBody><simple>{{greeting}} ${body}</simple></setBody>
<log message="${body}"/>
</route>
</routeTemplate>
</routeTemplates>
YAML DSL
To configure routes with YAML, you must add the camel-quarkus-yaml-dsl
dependency to the classpath.
With Camel Main, you can set a property that points to the location of YAML files containing routes, REST DSL and Route templates definitions:
camel.main.routes-include-pattern = routes/routes.yaml, routes/rests.yaml, rests/route-template.yaml
- route:
id: "my-yaml-route"
from:
uri: "timer:from-yaml?period=1000"
steps:
- set-body:
constant: "Hello YAML!"
- to: "log:from-yaml"
- rest:
get:
- path: "/greeting"
to: "direct:greet"
- route:
id: "rest-route"
from:
uri: "direct:greet"
steps:
- set-body:
constant: "Hello YAML!"
- route-template:
id: "myTemplate"
parameters:
- name: "name"
- name: "greeting"
defaultValue: "Hello"
- name: "myPeriod"
defaultValue: "3s"
from:
uri: "timer:{{name}}?period={{myPeriod}}"
steps:
- set-body:
expression:
simple: "{{greeting}} ${body}"
- log: "${body}"
- templated-route:
route-template-ref: "myTemplate"
parameters:
- name: "name"
value: "tick"
- name: "greeting"
value: "Bonjour"
- name: "myPeriod"
value: "5s"
What’s next?
We recommend to continue with Configuration.