I believe that:

- (Sub) routes are around 40% of the solution (Cause put logic in a
separate route and call it from one or more other routes)
- RouteTemplate are around 60% of the solution (Adding parameters and
defaults that can be started multiple times)
- Kameletes are around 80% of the solution (Calling it directly from a
route by name and route and routeid are automatically started)

The suggestion I did was to get to 100% and make it a real "pattern" with
for newbies logical names and part of the core.

Raymond



On Mon, Jan 8, 2024 at 4:43 PM ski n <raymondmees...@gmail.com> wrote:

> I also seem to recall that routeTemplates haven't all functionality from
> Kamelets, and you can't call all routeTemplates exactly the same from the
> Kamelet component, but maybe this is not a limitation anymore.
>
> btw In my own runtime (Assimbly) I do load all Kamelets by default, so
> they are straight to use.
>
> Raymond
>
> On Mon, Jan 8, 2024 at 4:24 PM ski n <raymondmees...@gmail.com> wrote:
>
>> 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