Hi You can also use nodePrefixId to help make unique ids easier, which you can set on routes
On Tue, Apr 16, 2024 at 9:49 AM Claus Ibsen <claus.ib...@gmail.com> wrote: > Hi > > This is correct as-is. You should not have duplicate ids, its your problem > to fix that. > > On Tue, Apr 16, 2024 at 9:23 AM Michael Rambichler <mich...@rambichler.at> > wrote: > >> Hi, >> >> >> >> we recently switched from Camel 3.18 to Camel 3.22 and we discovered >> following issue in some of our applications: >> >> >> >> We have several applications that use e.g. openapi generator to create >> separate route builder classes, a minimal reproducible example is: >> >> >> >> @Component >> >> public final class RestRoute extends RouteBuilder { >> >> public void configure() { >> >> rest().get().id("myRoute1").to("log:foo"); >> >> } >> >> } >> >> >> >> The id “myRoute1” is specified over the operationId in the open API spec. >> Furthermore, we have following “main” route using the same route ID (not >> on >> purpose): >> >> >> >> @Component >> >> public class MainRoute extends RouteBuilder { >> >> public void configure() { >> >> from("direct:myRoute1").routeId("myRoute1").to("log:bar"); >> >> } >> >> } >> >> >> >> The routeId in this route is typically set over config. Both routes use >> the >> same ID (which is not easy to detect in an application if REST route is >> auto-generated and main route gets ID from config). In Camel 3.18, we did >> not have a problem with that. >> >> >> >> However, in Camel 3.22, running a simple unit test shows a >> non-deterministic behavior: >> >> >> >> 1. If RestRoute is configured first, it gets the ID “myRoute1” >> assigned. >> Afterwards, MainRoute is configured, and detects that “myRoute1” is >> already >> used, and throws an Exception: >> >> FailedToStartRouteException: Failed to start route myRoute1 because of >> duplicate id detected: myRoute1. >> >> >> >> 2. If MainRoute is configured first, it gets the ID “myRoute1” >> assigned. >> Afterwards, RestRoute is configured, and detects that “myRoute1” is >> already >> used, and then assigns a new route ID to RestRoute (“route1”). No >> problem >> arises here. >> >> >> >> The problem is that the result varies from run to run. We had the >> situation, that in local unit test and test pipeline, the tests were >> running fine, but in the production deployment the test suddenly failed. >> >> Even worse is that the application startup would also fail if RestRoute is >> configured first. >> >> >> >> Another problem in Camel 3.22 we discovered in our tests was that if >> RestRoute uses .routeId() instead of .id(), e.g. >> rest().get().routeId("myRoute1").to("log:foo"), then one of the two routes >> will not start at all, without throwing an error. >> >> Here, the route that is configured first starts, and the other route won’t >> start. In Camel 3.18, .routeId() is not available for rest routes at all, >> so no problem there. >> >> >> >> So, it looks like the order of route configuration was deterministic in >> Camel 3.18 (here, it seems the route configuration order depended on the >> name of the class or the package the class is in). >> >> In Camel 3.22 it seems this is not deterministic anymore, leading to >> above-described problems. >> >> >> >> Please let us know if this behavior is known and if I should create a >> ticket for it. >> >> >> >> Thanks >> > > > -- > Claus Ibsen > ----------------- > @davsclaus > Camel in Action 2: https://www.manning.com/ibsen2 > -- Claus Ibsen ----------------- @davsclaus Camel in Action 2: https://www.manning.com/ibsen2