On Fri, Jun 26, 2020 at 12:40 AM Ron Cecchini <[email protected]> wrote:
>
> Thanks as always, Claus.
>
> Correct, I will want to unregister / close the listener's connection upon 
> shutdown.
>
> Correct, I don't want to create the ProducerTemplate over and over.  I'll do 
> it once at initialization.
>
> I'll look into what it takes to create a custom component, but in the 
> meantime, what is the best way to detect a graceful shutdown?
>
> I'm running in Spring Boot.  I found an example where you could have your 
> class implement "SmartLifecycle".
>
> Is that the best way or is there some annotation I can use to detect a 
> shutdown (sort of like the @PostConstruct upon startup) ?
>

SmartLifecycle is from spring, and if so then you are tied to spring.
Also then you are using two different means - @PostConstruct for init
and smart lifecycle for stop. Maybe try to find a single thing that
are the same and can do both.

In Camel we have a Service API for lifecycle that has start/stop logic
https://camel.apache.org/manual/latest/lifecycle.html

That are built into the default component / default endpoint etc,
where you can override the doStart / doStop methods.

But this entails that you build a custom Camel component.

For a bean then maybe look at those spring way of start / stop callbacks.
Although if you use the bean in a Camel route - then the bean can also
extend ServiceSupport or implement Service and have Camel call its
start/stop methods.



> Thanks again.
>
> > On 06/22/2020 12:57 AM Claus Ibsen <[email protected]> wrote:
> >
> >
> > Hi
> >
> > I would consider writing a custom component. As dont you also need to
> > unregister your listener when your app shuts down?
> > All of the lifecycle and management of this can be built into the
> > component and then as end user it becomes easier to use as its just
> > like another Camel endpoint.
> >
> > And btw in your sample code, then you should only create the producer
> > template once - not per message.
> >
> > Also as alternative you can use Camels POJO routing to hide some of Camel
> > https://camel.apache.org/manual/latest/pojo-producing.html
> >
> >
> > On Sun, Jun 21, 2020 at 11:41 PM Ron Cecchini <[email protected]> 
> > wrote:
> > >
> > > Hi guys. I have to integrate a 3rd party’s message listener code into my 
> > > routes. Their API is pretty simple:
> > >
> > >     listener(“foo”, fooHandler());
> > >
> > > creates a listener using the underlying configured JMS and calls 
> > > fooHandler() whenever it sees a “foo“ message.
> > >
> > > Instead of creating a full-blown Camel component (something that I’ve 
> > > never done yet) which would allow me to do something like:
> > >
> > >     from(“mylistener:foo“).bean(fooProcessor)
> > >
> > > I was thinking about doing something simpler and creating a class that 
> > > calls listener() and where the handler injects the messages into a 
> > > “direct:foo” route. Something like:
> > >
> > >     class FooListener
> > >     {
> > >         @PostConstruct
> > >         void initialize()
> > >         {
> > >             listener("foo", fooHandler();
> > >         }
> > >
> > >         void fooHandler(msg)
> > >         {
> > >             ProducerTemplate template = context.createProducerTemplate();
> > >             template.asyncSendBody("direct:foo", msg);
> > >         }
> > >     }
> > >
> > > and then have a route like:
> > >
> > >     from("direct:foo").bean(fooProcessor);
> > >
> > > So, is this a dumb approach?  I realize creating a custom component would 
> > > be nicer and more easily reusable, but are there any other major pros and 
> > > cons?
> > >
> > > Thanks.
> >
> >
> >
> > --
> > Claus Ibsen
> > -----------------
> > http://davsclaus.com @davsclaus
> > Camel in Action 2: https://www.manning.com/ibsen2



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to