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/
