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

Reply via email to