We have a camel-k-runtime module [1] to support camel-k to automatically
create a Kubernetes CronJob which does something similar.
There is also the camel.main.durationMaxMessages option on camel-main [2]
that can be configure to shut down the context after a bumber of messages
so if configured to 1 and assuming that the first exchange is only a
trigger, then it should be enough to achieve the goal (if not, we cna add
additional options to make camel-main taking care of shutting down the
context according to some rules).

[1] https://github.com/apache/camel-k-runtime/tree/main/camel-k-cron
[2] https://camel.apache.org/components/4.0.x/others/main.html

---
Luca Burgazzoli


On Fri, Feb 2, 2024 at 11:38 AM Pasquale Congiusti <
[email protected]> wrote:

>
>
> On Fri, Feb 2, 2024 at 11:17 AM Maarten Donderwinkel
> <[email protected]> wrote:
>
>> We run a couple of Camel applications that utilize a K8S Cronjob.
>>
>>
>>
>> For our case we can auto shutdown the application with the property
>> camel.main.durationMaxIdleSeconds.
>>
>> It’ll shutdown if the application is idle for a number of seconds.
>>
>> Your use-case and desired ‘trigger’ might be different of course, but
>> there are more options to auto shutdown
>>
>>
>>
>> See https://camel.apache.org/components/4.0.x/others/main.html for more
>> information on that property and how to set it.
>>
>
> Thanks Maarten, it could be an interesting approach. Wasn't aware of those
> configuration. I'll experiment with them as well.
>
>
>>
>>
>> Met vriendelijke groet | Kind Regards | Meilleures salutations | Mit
>> freundlichen Grüβen,
>>
>> Maarten Donderwinkel
>>
>> Aiden Locatie Den Bosch [image: Email] [email protected]
>> www.aiden.eu
>> <https://www.aiden.eu/?utm_source=aidenemailsignature&utm_medium=email>  Het
>> Zuiderkruis 61
>> 5215 MV 's-Hertogenbosch
>>  +31 (0) 88 060 5111
>>
>>  +31 (0) 6 8683 0832
>>
>> [image: facebook.png] <https://www.facebook.com/weareAiden.eu> [image:
>> linkedin.png] <https://www.linkedin.com/company/aiden-eu> [image:
>> Twitter] <https://twitter.com/weareAiden> [image: youtube]
>> <https://www.youtube.com/channel/UCcLccRfot11DrZLNhlAS8fA>
>> <https://www.youtube.com/channel/UCcLccRfot11DrZLNhlAS8fA>
>> <https://www.aiden.eu/>
>> <https://www.aiden.eu/?utm_source=aidenemailsignature&utm_medium=email>
>> <https://www.twitter.com/user_name_here>
>> <https://www.youtube.com/user/user_name_here>
>>
>>
>> *From: *Pasquale Congiusti <[email protected]>
>> *Date: *Friday, 2 February 2024 at 11:08
>> *To: *dev <[email protected]>, [email protected] <
>> [email protected]>
>> *Subject: *How to make Camel cloud cron "friendly"
>>
>> Hi folks,
>> I'm working lately on some experiment to run a generic Camel application
>> on
>> a Kubernetes CronJob. The behavior expected by the cluster is that, once
>> the job workload is over, the application would exit with either a success
>> or error code. As we're running a Camel application, although the route
>> may
>> have finished, the entire application will continue to run until a
>> forceful
>> shutdown. I am not sure it exists any other way, so I found my way to
>> workaround this behavior by following the approach in [1], which would
>> ends
>> up in something like the following code:
>>
>> public class TestCron extends RouteBuilder {
>>     @Override
>>     public void configure() throws Exception {
>>         from("timer:cron?delay=0&period=1&repeatCount=1")
>>         // Simulate heavylift work
>>         .delay(10000)
>>         .to("log:info")
>>         .log("DONE!")
>>         .process(new Processor() {
>>             Thread stop;
>>             @Override
>>             public void process(final Exchange exchange) throws Exception
>> {
>>                 if (stop == null) {
>>                     stop = new Thread() {
>>                         @Override
>>                         public void run() {
>>                             try {
>>                                 exchange.getContext().stop();
>>                             } catch (Exception e) {
>>                                 // ignore
>>                             }
>>                         }
>>                     };
>>                 }
>>                 // start the thread that stops the context
>>                 stop.start();
>>             }
>>         });
>>     }
>> }
>>
>> However, this workaround feels a bit too hacky as it involves playing with
>> Camel Context directly. It is also impossible to reproduce easily in non
>> Java DSL, like in YAML. I am wondering if we can think on having a higher
>> level EIP such we have with "stop", something like "shutdown" which
>> behavior may be similar of what described above, taking care to gracefully
>> shutdown the application when it is invoked. This one may do some finer
>> grained controls to verify that the exchanges has really completed or
>> there
>> are no others routes running or any other low level check that would
>> perform a controlled shutdown. How does it sound? or which would be any
>> alternative to make Camel more cloud cron "friendly"?
>>
>> Regards,
>> Pasquale.
>>
>> [1]
>>
>> https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcamel.apache.org%2Fmanual%2Ffaq%2Fhow-can-i-stop-a-route-from-a-route.html%23HowcanIstoparoutefromaroute-Usingathreadtostoparoutefromaroute&data=05%7C02%7Cmaarten.donderwinkel%40aiden.eu%7C9549aaebd583438beb6608dc23d6d5dc%7Cb9d83e0e2e894f4e9c2bbe3df185e1af%7C0%7C0%7C638424652819450381%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=Gbf%2F8vAkywA7et%2FBR12uqs1OqTNFeP7Saaqm6jJHCzg%3D&reserved=0
>> <https://camel.apache.org/manual/faq/how-can-i-stop-a-route-from-a-route.html#HowcanIstoparoutefromaroute-Usingathreadtostoparoutefromaroute>
>>
>

Reply via email to