camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Green <james.mk.gr...@gmail.com>
Subject Re: REST InOut with JMS InOnly
Date Thu, 05 Feb 2015 09:38:21 GMT
Yes this is the simple bit.

The not so simple bit is appreciating what happens under the hood. wiretap,
quite rightly, sends the same object references down each path. If one of
those paths mutates the Exchange's Message, the other routes will spot the
change and the developer gets a rude surprise.

Under these circumstances I presume the onPrepare to clone the Exchange is
required? It's not overly well documented on the wiretap page.

James


On 4 February 2015 at 06:11, Claus Ibsen <claus.ibsen@gmail.com> wrote:

> On Tue, Feb 3, 2015 at 2:30 PM, James Green <james.mk.green@gmail.com>
> wrote:
> > Nope :)
> >
> > rest("/from-smtp/")
> >         .post()
> >         .type(EmailedSmsRequest.class)
> >         .to("direct:fromSmtp");
> >
> > direct:fromSmtp routes onward to direct:router. direct:router sends it
> > onwards to jms:queue:foo asynchronously. The route that reads
> > from("direct:router") is intended for be fully re-usable and has multiple
> > public interfaces sending messages into it but is not expected to reply
> at
> > all (except for raising exceptions of course).
> >
> > Beyond direct:fromSmtp routing to direct:router, I want to set the OUT
> part
> > of the exchange so that the rest component knows what to send back to the
> > http client.
> >
>
> Then do additional routing after, eg to set the OUT part you want
>
>
>
> > I suspect I can wiretap() to split the messaging across two routes - one
> to
> > direct:router and the other to processing that provides the OUT part of
> the
> > exchange however it doesn't feel entirely natural hence I didn't think of
> > it myself.
> >
> > [ I have not yet tried wiretap in the code I'm asking the question about,
> > will do shortly ]
> >
> >
> >
> > On 3 February 2015 at 13:20, Morgan Hautman <morgan.hautman@gmail.com>
> > wrote:
> >
> >> Yes I understand we can encounter a timeout when we don't respond to
> >> http/rest because it's synchronous.
> >>
> >> But I think what James means is :
> >>
> >> 1st route:
> >> from(cxf:...).to(activemq:bar)
> >>
> >> 2nd route
> >> from(activemq: bar).to(processing)
> >>
> >> The first route sends a message to the second route through activemq and
> >> waits for the second route to process the message and the second route
> >> respond to the first route who will answer to the client what "route2"
> >> responded. (timeout or not)
> >>
> >> Hope It's comprehensive.
> >>
> >> PS: I'm not in James team, I just try to help and understand a problem I
> >> had myself some months ago but didn't look further.
> >>
> >>
> >> On 3/02/2015 13:54, Claus Ibsen wrote:
> >>
> >>> On Tue, Feb 3, 2015 at 1:27 PM, Morgan Hautman <
> morgan.hautman@gmail.com>
> >>> wrote:
> >>>
> >>>> Claus,
> >>>>
> >>>> Is their any way a queue (using activemq) could respond , like a
> >>>> request-reply mechanism?
> >>>>
> >>>> http://camel.apache.org/request-reply.html
> >>>>
> >>>>  Not sure I follow. Camel can do InOnly and InOut over JMS. So yeah
> >>> both is possible.
> >>>
> >>> Just mind that a client like HTTP / REST is synchronous in that sense
> >>> the client awaits a response, so whether that is just a OK or to
> >>> respond with some new data, then that needs to happen, and occurs when
> >>> the exchange is done being routed, and the control is back at the
> >>> consumer.
> >>>
> >>>  On 3/02/2015 13:14, Claus Ibsen wrote:
> >>>>
> >>>>> Hi
> >>>>>
> >>>>> You can send the message to the JMS as InOnly or use WireTap
> >>>>>
> >>>>> On Tue, Feb 3, 2015 at 12:27 PM, James Green <
> james.mk.green@gmail.com>
> >>>>> wrote:
> >>>>>
> >>>>>> I have two routes:
> >>>>>>
> >>>>>> 1. A rest dsl accepting data from HTTP clients and sending it
to the
> >>>>>> route
> >>>>>> below before replying to the client
> >>>>>> 2. A "backend" route that receives an Exchange and sends it
to a JMS
> >>>>>> queue
> >>>>>>
> >>>>>> By default, although the JMS queue gets the message, a stack
trace
> >>>>>> occurs
> >>>>>> because the queue did not respond. So I set the backend route
to be
> >>>>>> InOnly
> >>>>>> and now no stack trace occurs.
> >>>>>>
> >>>>>> However, the remaining part of my rest dsl route does not execute.
> >>>>>>
> >>>>>> So how do I accept some REST request, fire off an asynchronous
JMS
> >>>>>> message,
> >>>>>> and reply to the HTTP client?
> >>>>>>
> >>>>>> Thanks,
> >>>>>>
> >>>>>> James
> >>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>
> >>>
> >>
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: cibsen@redhat.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
> hawtio: http://hawt.io/
> fabric8: http://fabric8.io/
>

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