Yeah, calling a Kamelet has the advantage that the subroute is dynamically
created.

- Still need the to, not a separate EIP.
- Beginners would not search for "Kamelet", but function would be more
common
- You still need a from statement within the Kamelet
- Kamelet is not really part of the route, but a separate (sub)route

But yeah this comes close. Maybe just call it with
function("template").parameters() or routeTemplate("").parameters()    in
the DSL would be enough for most.

Raymond






On Mon, Jan 8, 2024 at 4:00 PM Andrea Cosentino <anco...@gmail.com> wrote:

> It really seems the Kamelets' mission
>
> Il lun 8 gen 2024, 15:59 Pasquale Congiusti <pasquale.congiu...@gmail.com>
> ha scritto:
>
> > Hi Raymond,
> > Can't be a Kamelet considered for such a feature? I think it's one of its
> > purposes as well.
> >
> > Pasquale.
> >
> > On Mon, Jan 8, 2024 at 3:21 PM ski n <raymondmees...@gmail.com> wrote:
> >
> > > Question/Discussion:
> > >
> > > Do you think "functions" in the Camel DSL make sense?
> > >
> > > Explanation:
> > >
> > > Say you have to following route:
> > >
> > > from("direct:a")
> > >     .setHeader("myHeader", constant("test"))
> > >     .to("direct:b");
> > >
> > > And then you have a similar route:
> > >
> > > from("direct:c")
> > >     .setHeader("myHeader2", constant("test"))
> > >     .to("direct:d");
> > >
> > > As you are setting it more or less the same you could make a
> > routeTemplate:
> > >
> > >         routeTemplate("someFunction")
> > >             // here we define the required input parameters (with a
> > default
> > > value)
> > >              .templateParameter("headerName", "myHeader")
> > >             .from("direct:a")
> > >                  .setHeader("{{headerName}}", constant("test"))
> > >
> > > And then you can:
> > >
> > > from("direct:a")
> > >     .to("direct:someFunction")
> > >     .to("direct:b");
> > >
> > > And for the second route:
> > >
> > > from("direct:c")
> > >     .to("direct:someFunction")
> > >     .to("direct:d");
> > >
> > >
> > > This however seems a bit cumbersome, because:
> > >
> > > 1. I must have a from statement in my subroute (which should be just a
> > > function).
> > > 2. I need to know the component of the from statement and call it with
> a
> > > "to" statement.
> > > 3. I need to create the route from routeTemplates before the route
> starts
> > > and I need to do this everytime I use that 'function'.
> > > 4. If I want to use the same code then I need to call the same route
> > > multiple times,
> > >    but in certain cases this can become a bottle-neck (think of Seda of
> > JMS
> > > Queues).
> > >    Especially when call it from hundreds of places, this maybe
> > troublesome
> > > (throughput or memory).
> > >
> > >
> > > Would be easier and more direct to have like this:
> > >
> > > function("someFunction")
> > > .parameter("headerName", "myHeader")
> > > .setHeader("{{headerName}}", constant("test"))
> > >
> > > And then call it:
> > >
> > > from("direct:a")
> > >     .function("someFunction")
> > >     .to("direct:b");
> > >
> > > And:
> > >
> > > from("direct:c")
> > >     .function("someFunction")
> > > .parameter("myHeader2")
> > >     .to("direct:d");
> > >
> > > On install the routes are exactly the same as the first and second
> route
> > > (only reused).
> > >
> > > What do think?
> > >
> > > Raymond
> > >
> >
>

Reply via email to