This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch prefixId
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 9565e46ab61b66e3cfada2cda25da3c44cc66211
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Dec 7 09:34:36 2022 +0100

    CAMEL-18798/CAMEL-18771: Allow to configure nodePrefixId on 
route/routeTemplate to prefix all node IDs to make it easier to avoid clash 
with hardcoded IDs.
---
 .../modules/ROOT/pages/route-template.adoc         | 83 ++++++++++++++++++++++
 1 file changed, 83 insertions(+)

diff --git a/docs/user-manual/modules/ROOT/pages/route-template.adoc 
b/docs/user-manual/modules/ROOT/pages/route-template.adoc
index ccc86207b49..8b08497f9a6 100644
--- a/docs/user-manual/modules/ROOT/pages/route-template.adoc
+++ b/docs/user-manual/modules/ROOT/pages/route-template.adoc
@@ -254,6 +254,89 @@ And in YAML DSL
         value: "5s"
 ----
 
+=== Using hardcoded node IDs in route templates
+
+If route templates contains hardcoded node IDs then routes created from 
templates will use the same IDs
+and therefore if 2 or more routes are created from the same template, you will 
have _duplicate id detected_ error.
+
+Given the route template below, then it has hardcoded ID (_new-order_) in node 
calling the http services.
+
+[source,java]
+----
+public class MyRouteTemplates extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+        routeTemplate("orderTemplate")
+            .templateParameter("queue")
+            .from("jms:{{queue}}")
+                .to("http:orderserver.acme.com/neworder").id("new-order")
+                .log("Processing order");
+    }
+}
+----
+
+When creating routes from templates, you can then provide a _prefix_ which are 
used for all node IDs.
+This allows to create 2 or more routes without _duplicate id_ errors.
+
+For example in the following we create a new route _myCoolRoute_ from the 
_myTemplate_ template, and
+use a prefix of _web_.
+
+And in Java DSL
+
+[source,java]
+----
+templatedRoute("orderTemplate")
+        .routeId("webOrder")
+        .prefixId("web")
+        .parameter("queue", "order.web");
+----
+
+Then we can create a 2nd route:
+
+[source,java]
+----
+templatedRoute("orderTemplate")
+        .routeId("ftpOrder")
+        .prefixId("ftp")
+        .parameter("queue", "order.ftp");
+----
+
+And in Spring XML DSL
+
+[source,xml]
+----
+<camelContext>
+  <templatedRoute routeTemplateRef="orderTemplate" routeId="webOrder" 
prefixId="web">
+    <parameter name="queue" value="web"/>
+  </templatedRoute>
+</camelContext>
+----
+
+And in XML DSL
+
+[source,xml]
+----
+<templatedRoutes xmlns="http://camel.apache.org/schema/spring";>
+  <templatedRoute routeTemplateRef="orderTemplate" routeId="webOrder" 
prefixId="web">
+    <parameter name="queue" value="web"/>
+  </templatedRoute>
+</templatedRoutes>
+----
+
+And in YAML DSL
+
+[source,yaml]
+----
+- templated-route:
+    route-template-ref: "orderTemplate"
+    route-id: "webOrder"
+    prefix-id: "web"
+    parameters:
+      - name: "queue"
+        value: "web"
+----
+
 == Binding beans to route template
 
 The route template allows to bind beans which is local scoped and only used as 
part of creating routes from the template.

Reply via email to