Chapter 3. Defining Camel routes
Chapter 3. Defining Camel routes In Red Hat build of Apache Camel for Quarkus, you can define Camel routes using the following languages: Section 3.1, "Java DSL" Section 3.3, "XML IO DSL" Section 3.4, "YAML DSL" 3.1. 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 a simple example of a route using the timer component: 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"); } } 3.2. Endpoint DSL Since Camel 3.0, you can use fluent builders also for defining Camel endpoints. The following is equivalent with the 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"); } } Note Builder methods for all Camel components are available via camel-quarkus-core , but you still need to add the given component's extension as a dependency for the route to work properly. In case of the above example, it would be camel-quarkus-timer . 3.3. XML IO 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, link:https://access.redhat.com/documentation/en-us/red_hat_build_of_apache_camel/4.4/html-single/red_hat_build_of_apache_camel_for_quarkus_reference/ #extensions-xml-io-dsl[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 Note Path globbing like camel.main.routes-include-pattern = *./routes.xml currently does not work in native mode. Route <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> Warning When using XML routes with beans, it is sometime needed to refer to class name, for instance beanType=org.apache.SomeClass . In such cases, it might be needed to register the class for reflection in native mode. Refer to the Native mode section for more information. Warning Spring XML with <beans> or Blueprint XML with <blueprint> elements are not supported. The route XML should be in the simplified version like: Rest DSL <rests xmlns="http://camel.apache.org/schema/spring"> <rest id="greeting" path="/greeting"> <get path="/hello"> <to uri="direct:greet"/> </get> </rest> </rests> Route Templates <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}} USD{body}</simple></setBody> <log message="USD{body}"/> </route> </routeTemplate> </routeTemplates> 3.4. 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 - route: id: "my-yaml-route" from: uri: "timer:from-yaml?period=1000" steps: - set-body: constant: "Hello YAML!" - to: "log:from-yaml" Rest DSL - rest: get: - path: "/greeting" to: "direct:greet" - route: id: "rest-route" from: uri: "direct:greet" steps: - set-body: constant: "Hello YAML!" Route Templates - 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}} USD{body}" - log: "USD{body}" - templated-route: route-template-ref: "myTemplate" parameters: - name: "name" value: "tick" - name: "greeting" value: "Bonjour" - name: "myPeriod" value: "5s"
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"); } } 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"); } } camel.main.routes-include-pattern = routes/routes.xml, file:src/main/routes/rests.xml, file:src/main/rests/route-template.xml <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> <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}} USD{body}</simple></setBody> <log message="USD{body}"/> </route> </routeTemplate> </routeTemplates> 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}} USD{body}" - log: "USD{body}" - templated-route: route-template-ref: "myTemplate" parameters: - name: "name" value: "tick" - name: "greeting" value: "Bonjour" - name: "myPeriod" value: "5s"