camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Raul Kripalani <r...@evosent.com>
Subject Re: Synchronuos onCompleation?
Date Thu, 04 Apr 2013 21:59:58 GMT
Yes, that's exactly how I would go about it. When I said "Exchange
Notifier", I actually meant "Event Notifier".

Just extend EventNotifierSupport and enable the Exchange Failed and
Exchange Completed events. Make them react accordingly by calling either
the onFailure or onComplete method of the IdempotentOnCompletion
Synchronization present on the Exchange.

Worse comes to worst, if you don't manage to get it working like this, you
can consider extending IdempotentConsumer and pluging it in as a normal
Processor in your route. Within it, instead of injecting a Synchronization,
add the messageId to the idempotent repository from inside an AsyncCallback
that wraps the original one.

It will then execute synchronously as the route unwinds and the
AsyncCallbacks are called.

Regards,

*Raúl Kripalani*
Enterprise Architect, Open Source Integration specialist, Program
Manager | Apache
Camel Committer
http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani
http://blog.raulkr.net | twitter: @raulvk

On Thu, Apr 4, 2013 at 8:58 PM, Christian Müller <
christian.mueller@gmail.com> wrote:

> Have in mind the IdempotentConsumer registers an IdempotentOnCompletion for
> each new added exchange in the repository.
>
> Will the following work?:
> We register an EventNotifier which will react on failed exchanges for a
> give route. This custom EventNotifier is executed before the
> onCompleation() is executed. So we can remove the IdempotentOnCompletion
> from the exchange in our custom EventNotifier after we have executed it
> synchronous. Right?
>
> Best,
> Christian
>
>
> On Thu, Apr 4, 2013 at 5:37 PM, Raul Kripalani <raul@evosent.com> wrote:
>
> > BTW - In this Exchange Notifier, I suppose you'd call
> > Exchange.handoverCompletions() to retrieve the Synchronizations, and then
> > execute them straightaway.
> >
> > But I'm not 100% sure. Just a suggestion.
> >
> > Regards,
> >
> > *Raúl Kripalani*
> > Enterprise Architect, Open Source Integration specialist, Program
> > Manager | Apache
> > Camel Committer
> > http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani
> > http://blog.raulkr.net | twitter: @raulvk
> >
> > On Thu, Apr 4, 2013 at 4:28 PM, Raul Kripalani <raul@evosent.com> wrote:
> >
> > > Hi Christian,
> > >
> > > I solved this once by using an ExchangeNotifier that processes the
> > > Exchange Completed events.
> > > The callback is executed synchronously.
> > >
> > > Mind you, there was a similar thread a few weeks ago, where more
> options
> > > were presented. But I'm still doubtful about some of them being
> > synchronous
> > > (and I haven't had time to dig into the code to verify it).
> > >
> > > Regards,
> > >
> > > *Raúl Kripalani*
> > > Enterprise Architect, Open Source Integration specialist, Program
> Manager
> > > | Apache Camel Committer
> > > http://about.me/raulkripalani |
> http://www.linkedin.com/in/raulkripalani
> > > http://blog.raulkr.net | twitter: @raulvk
> > >
> > > On Thu, Apr 4, 2013 at 4:22 PM, Christian Müller <
> > > christian.mueller@gmail.com> wrote:
> > >
> > >> Camel version 2.8.0
> > >>
> > >> We have a web servive route which use an idempotent repository (JDBC)
> to
> > >> prevent duplicates. If the processing of one exchange failed, the
> entry
> > is
> > >> removed from the idempotent repository in the async onCompleation()
> > >> execution.
> > >>
> > >> From time to time we have the issue, that when the client send the
> > request
> > >> again after only a few milli seconds, the entry wasn't removed from
> the
> > >> repository and processed as a duplicate.
> > >>
> > >> Is there a way to process the onCompleation() synchronously (before
> the
> > >> web
> > >> service response is send back)?
> > >>
> > >> Thanks in advance,
> > >> Christian
> > >>
> > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message