4

我想将 web 服务请求路由到 jms 队列的 InOnly 端点。然后将从单独的 InOnly 端点接收到的响应 jms 消息路由回 Web 服务客户端作为响应。Web 服务请求/响应是同步的 InOut 模式,子路由是异步的。我有哪些选择可以使用 Camel 实现这一目标?

这里的骆驼路线是用来解释我的问题的:

String uri={webserice uri}
from(uri)    
    .process(new Processor() {
        public void process(Exchange exchange) throws Exception {
            ServcieRequest req =            
            exchange.getIn().getBody(ServcieRequest.class);                 
            // One option to me is to spawn another route here to route to jms queue...         
            ProducerTemplate template = exchange.getContext().createProducerTemplate();
            template.sendBodyAndHeaders("jms:queue:INQueue", req.getPayload(), headers);
            // then need to wait ...until received jms response from the route below        

   }});


from("jms:queue:OUTQueue")
   .process(new Processor() {
       public void process(Exchange exchange) throws Exception {
           // received jms response message
           // need to update the exchange data in the above route based on jms message
           // so the final response to the webservice cilent can receive the data ...
       }});
4

1 回答 1

2

我认为您应该依靠 Camel 中的请求回复机制来完成此任务。 Camel Doc,专属固定回复队列

所以我猜下面的 DSL 路由几乎可以满足您的需求(如果没有其他原因为什么您应该为 JMS 部分使用 InOnly 模式?)。如果需要,请确保调整 requestTimeout(因为它默认为 20 秒超时)。

from(webserviceURI)
  .inOut().to("jms:queue:INQueue?replyTo=OUTQueue?replyToType=Exclusive");

是的,另一件事。如果您在多个节点上运行此程序,则每个节点需要一个独占队列。

于 2012-04-21T20:35:04.327 回答