Hi Claus, unfortunately this still results in a the same error message (The OUT message was not received...). Route now looks like this, rest of the code stayed the same:
rest("/API/") .get("/object/{ID}/") .to("direct:objectGet"); from("direct:objectGet").to(ExchangePattern.InOut, "activemq:test"); from("activemq:test").process(resultProcessor); The message history tells me: RouteId ProcessorId Processor Elapsed (ms) [route1 ] [route1 ] [jetty:http://0.0.0.0:8080/API/object/%7BID%7D?httpMethodRestrict=GET ] [ 21035] [route1 ] [restBinding1 ] [ ] [ 6] [route1 ] [route1 ] [direct:objectGet ] [ 21019] [route2 ] [to1 ] [activemq:test ] [ 21018] So somehow the messages do not get fetched from the activemq bus, do I see this correctly? Could this also be an ActiveMQ configuration problem? I'm a little bit stuck at this point. Regards Frank ________________________________________ Von: Claus Ibsen [claus.ib...@gmail.com] Gesendet: Dienstag, 29. November 2016 18:49 An: users@camel.apache.org Betreff: Re: How to use the InOut (Request-Reply) pattern in combination with REST/Jetty? Ah you need to break this up into two separate routes from direct foo to activemq test from activemq test process replyProcessor On Tue, Nov 29, 2016 at 6:21 PM, Wein, Frank (RRZE) <frank.w...@fau.de> wrote: > Hi, > thanks for the link, unfortunately it still doesn't seem to work. The > Exchange does not receive a reply message: > "org.apache.camel.ExchangeTimedOutException: The OUT message was not received > within: 20000 millis due reply message with correlationID: > [...]-33309-1480438574020-0-3 not received on destination: > temp-queue://ID:[...]-35217-1480438579489-1:1:1. > Exchange[ID-[...]-33309-1480438574020-0-1]" > > The incoming messages on the ActiveMQ queue from the REST endpoint end up in > the dead-letter queue: > dlqDeliveryFailureCause java.lang.Throwable: Message Expired. > Expiration:1480439266246 > > I tried quite a few things (inOut at different position in the route > description, getIn, getOut, shared queue, ...), but nothing seems to work > (always timeout waiting for the reply). Is it possible at all what I want to > accomplish (reminder: Jetty REST endpoint passes message to queue, other > route fetches from queue, modifies message and the original endpoint should > reply with modified message). > > Is there a mistake in my current code? > > Processor resultProcessor = new Processor() { > @Override > public void process(Exchange exchange) throws Exception { > exchange.getIn().setBody( "response"); > return; > } > }; > > getContext().addComponent("activemq", > ActiveMQComponent.activeMQComponent("tcp://localhost:61616")); > > > restConfiguration().component("jetty").host("0.0.0.0").port(8080).dataFormatProperty("prettyPrint", > "true"); > > rest("/API/").get("/object/{ID}/").to("direct:objectGet"); > > from("direct:objectGet").to(ExchangePattern.InOut, > "activemq:test").process(resultProcessor).to("activemq:test"); > > > Is my "to("activemq:test")" not the correct way to send back the modified > message to the producer? Actually I thought the message exchange will > automatically take care of sending back to the modified message body to the > producer (doesn't seem to make a difference here anyway). > > > Thanks for any suggestions! > > Frank > > ________________________________________ > Von: Quinn Stevenson [qu...@pronoia-solutions.com] > Gesendet: Montag, 28. November 2016 17:35 > An: users@camel.apache.org > Betreff: Re: How to use the InOut (Request-Reply) pattern in combination with > REST/Jetty? > > Yes - this is possible. Look at "Request-Replyā€¯ in the JMS docs ( > http://camel.apache.org/jms.html <http://camel.apache.org/jms.html> ). > > >> On Nov 28, 2016, at 12:51 AM, Frank Wein <frank.w...@fau.de> wrote: >> >> Hi all, >> some additional info/Java code: What I have currently working is some code >> without the ActiveMQ part: >> >> restConfiguration().component("jetty").host("0.0.0.0").port(8080) >> .dataFormatProperty("prettyPrint", "true") >> .bindingMode(RestBindingMode.auto); >> >> rest("/API/").get("/object/{ID}/").to("direct:objectGet"); >> >> from("direct:objectGet") >> .setExchangePattern(ExchangePattern.InOut) >> .setHeader(Exchange.HTTP_PATH, simple( >> "/Webservice/RESTService/Object/${header.ID}")) >> .setHeader(Exchange.HTTP_METHOD, simple("GET")) >> .to("jetty://http://localhost:8888?bridgeEndpoint=true"); >> >> I send my REST request to localhost:8080/object/[ID]/ and get back the reply >> from the other webservice running on localhost:8888. >> >> Now, I want to include an ActiveMQ queue here. Basically the ActiveMQ queue >> should be between the two routes (from/to("direct:objectGet")). The first >> route should send the message to the queue, the second route should fetch >> it, get the response from the other web service and send the response back >> via the queue to the first route. This one should then reply to the incoming >> REST request. Is this possible, if yes, how? My attempts at this did not >> really work. >> >> Regards >> Frank -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2