Apache camel 如何使用异步子路由连接Apache Camel同步请求/应答端点

Apache camel 如何使用异步子路由连接Apache Camel同步请求/应答端点,apache-camel,Apache Camel,我想将webservice请求路由到jms队列的InOnly端点。然后将从单独的InOnly端点接收的响应jms消息作为响应路由回webservice客户端。webservice请求/响应是一种同步InOut模式,子路由是异步的。我有什么选择来实现这一点 这里的骆驼路线用来解释我的问题: String uri={webserice uri} from(uri) .process(new Processor() { public void process(Excha

我想将webservice请求路由到jms队列的InOnly端点。然后将从单独的InOnly端点接收的响应jms消息作为响应路由回webservice客户端。webservice请求/响应是一种同步InOut模式,子路由是异步的。我有什么选择来实现这一点

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

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 ...
       }});

我认为您应该依赖Camel中的请求-响应机制来完成此任务。

因此,我想下面的DSL路由基本上满足了您的需求(如果没有其他理由让您为JMS部分使用InOnly模式的话)。如果需要,请确保调优requestTimeout(默认为20Sec timeout)


是的,还有一件事。如果在多个节点上运行此操作,则每个节点需要一个排他队列。

就回复的协调而言,该语句是错误的。Camel使用标准JMSCorrelationID映射请求和回复。如果用户没有手动显式配置相关id,则会自动生成id。感谢您的回复。我试过佩特的计划,它成功了!由于
inOut().to(“…
已被弃用,我改为
.inOut(“…
)。由于某种原因,我也跳过了
replyToType
,因为它给出了错误“无效的目的地名称-OUTQueue?replyToType=Exclusive”在我的Camel版本2.9.1中,克劳斯在JMSCorrelationID上是正确的。事实上,我想知道Camel是否有办法忽略JMSCorrelationID(我知道这是一个有点不同的主题)在某些情况下,它可能会很方便?有一个disableReplyTo选项。请参阅Camel JMS文档:。那里确实有很多详细信息。现在您已经解决了这个问题,您可以将其标记为已回答吗?现在我可以看到disableReplyTo可能会产生这种效果,或者replyToType=Exclusive肯定会忽略JMSCorrelationID chec国王,谢谢你的回答。
from(webserviceURI)
  .inOut().to("jms:queue:INQueue?replyTo=OUTQueue?replyToType=Exclusive");