Camel管道如何与jms端点一起工作

时间:2014-03-18 10:02:33

标签: java apache-camel

我试图了解Camel管道的行为。 以下是我用来理解这条路线的片段:

from("direct:from").process(new Processor() {

                @Override
                public void process(Exchange exchange) throws Exception {                        
                    exchange.getIn().setBody("Hello");                        
                }
            }).to("direct:one").to("mock:toThirdEndpoint");

            from("direct:one").setBody(constant("Second To Fourth Endpoint")).to("file://target/inbox");

交易所的机构发送给"直接:一个"是"你好"。 交易所的机构发送给" mock:toThirdEndpoint"是"第二到第四终点"。 我想知道第一个端点是" jms:queue"端点而不是" direct:one"。 本交易所的内容会发送给" mock:toThirdEndpoint"?

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

第一个队列中间的to(“jms:queue”)将充当其他请求/回复端点:消息“Hello”作为JMS消息发送,由第二个路由处理(下至“文件”) :// target / inbox“),文件端点产生的结果作为JMS消息发送到”replyTo“队列,然后在第一个路径中通过”mock:toThirdEndpoint“接收

答案 1 :(得分:0)

原始问题的答案来自管道的定义以及在参与管道的端点上应用的交换模式。

到底线,如果没有明确指定交换模式,默认情况下,Request Reply用于直接端点,Event Message用于使用JMS,SEDA和File组件的端点。

由于上述模式,事件消息端点不返回任何响应,因此管道继续前一阶段的输入消息。因此,下面的示例将忽略SEDA端点消费者返回的内容。直接端点使用者返回一条输出消息,该消息将被转发到管道的下一阶段。

from("direct:from").process(exchange -> exchange.getIn().setBody("Bob"))
    .to("direct:step1")
    .to("seda:step2")
    .log("${body}");

from("direct:step1").process(exchange -> exchange.getOut().setBody("Hi, "+exchange.getIn().getBody()));

from("seda:step2").process(exchange -> exchange.getOut().setBody(exchange.getIn().getBody()+"!"));

在该示例中,Direct和SEDA组件用于演示目的,因此直接描述了请求回复模式使用和SEDA事件消息使用。但是,可以在路径上指定默认模式。