如何在Spring应用程序中链接ProducerTemplate和Apache Camel路由?

时间:2016-10-14 13:42:02

标签: spring rest apache-camel

我刚刚开始使用Spring和CXF休息Web服务开发Apache Camel,在查看当前代码时我无法理解这些内容。

  1. 通常对于apache camel我们需要创建一个CamelContext,然后将它链接到producerTemplate,然后我们将路由添加到CamelContext,如下所示。

    CamelContext context = new DefaultCamelContext(); ProducerTemplate template = context.createProducerTemplate(); context.addRoutes(new RouteBuilder(){public void configure(){ ... }

  2. 但是当我在spring应用程序中看到它的不同时,我们正在XML文件中创建驼峰上下文,下面将允许spring在Spring ApplicationContext中搜索路由构建器实例,即Camel拾取由Spring在其中创建的任何RouteBuilder实例扫描过程。

    <camel-spring:camelContext id="marriottCamelContext"
            useMDCLogging="true" xmlns="http://camel.apache.org/schema/spring">
            <camel-spring:contextScan />
            <template id="xxxTemplateProducer" camelContextId="xxxCamelContext" />
        </camel-spring:camelContext>
    

    以上是RouteBuilder与驼峰上下文的链接。

    1. 现在对于生产者模板,就像在应用程序中一样,我们只是在@Service类中创建对象,如下所示,并将请求发送到Route类

      @Autowired 私人ProducerTemplate模板;

      UpsellResponse upsellResponse = template.requestBodyAndHeaders(“{{upsell.route}}”,upsellRequest,headers,UpsellResponse.class);

    2. 但我无法理解模板如何与Camel Context和Route链接。并且还想知道第一点是否正确。

      我还注意到在路由类中,{{}}用于从({{}})到({{}})的属性文件变量。这是与Camel相关的任何特定规则,因为在春天我们使用$ {}来使用带有@PropertySource and @Value的属性文件中的变量

      E.g from("{{upsell.route}}").routeId("v2.upsell.Hystrix.Consumer").to("{{upsell.hystrix.consumer.route}}");

1 个答案:

答案 0 :(得分:1)

当使用Spring XML文件和@Autowire等时,camel-spring具有工厂bean,可以创建ProducerTemplate并链接到CamelContext。它还有一个名称空间解析器来解析<camelContext>并创建Camel上下文。

使用{{ }},然后使用Camel用于属性占位符的语法。点击此处了解详情:http://camel.apache.org/how-do-i-use-spring-property-placeholder-with-camel-xml.htmlhttp://camel.apache.org/using-propertyplaceholder.html