2008/12/9 Ivan Dubrov <[EMAIL PROTECTED]>:
> Hi!
>
> The question is how can I asynchronously submit data received by Jetty
> component to the JMS queue?
>
> The use-case:
>
> 1) Client submits data using the POST to the specific URL
> 2) The message is received by the application and submitted to the JMS queue
> 3) Empty response is sent to the client (HTTP code is 200, meaning
> everything is OK, message was received for later processing).
> ...
> 4) Message is extracted from the queue and processed by some logic.
>
> I've tried this variant:
>
> <route>
>  <from uri="jetty:http://localhost:8080/greeter"/>
>  <to uri="activemq:queue:GREET" />
> </route>
>
> but it works synchronously, the response is not sent to the client (who
> sends the POST) until the message is processed. The reason is that Jetty
> component generates HttpExchange that always has exchange pattern InOut,
> therefore JmsProducer, created by the JmsComponent waits for the reply.
>
> I found the following workaround:
>
> <route>
>  <from uri="jetty:http://localhost:8080/greeter"/>
>  <to uri="bean:async?method=send" />
> </route>
>
> there async bean is instance of:
>
> public class AsyncBean {
>    @EndpointInject(uri = "activemq:GREET")
>    ProducerTemplate<Exchange> producer;
>    public String doSomething(String msg) {
>        producer.sendBody(msg);
>        return ""; // Send empty HTTP response to the client
>    }
> }
>
> but I don't like this solution too much, because I need one bean for
> each HTTP->JMS queue case (because of endpoint hard-coded in the
> annotation). Is there cleaner way to do this? Ideally, I want everything
> specified in the camel-context.xml only.

The JMS endpoint uses whatever exchange pattern its given. For more
background see
http://activemq.apache.org/camel/exchange-pattern.html

so you could explicitly configure the endpoint to use inOnly...

<route>
 <from uri="jetty:http://localhost:8080/greeter"/>
 <to uri="activemq:queue:GREET?exchangePattern=InOnly" />
</route>



-- 
James
-------
http://macstrac.blogspot.com/

Open Source Integration
http://fusesource.com/

Reply via email to