路线属性和交换属性之间的骆驼差异

时间:2015-09-03 12:47:31

标签: java properties apache-camel

有人可以解释一下这两个属性之间的区别吗?

@Override
public void setUp() throws Exception {
    context = new DefaultCamelContext(new SimpleRegistry());        
    template = context.createProducerTemplate();

    context.addRoutes(new RouteBuilder() {

        public void configure() throws Exception {              
            PropertiesComponent prop = context.getComponent(
                                      "properties", PropertiesComponent.class);
            prop.setLocation("classpath:test.properties");

            from("direct:start")
            .log("Property: ${properties:a}")
            .process(new Processor() {

                @Override
                public void process(Exchange ex) throws Exception {
                    String a = ex.getProperty("a", String.class);
                    LOG.info("Property: " + a);
                }
            })
            ;
        }
    });

    context.getShutdownStrategy().setTimeout(1);
    context.start();
}

@Test
public void testRoute() throws Exception {
    template.sendBody("direct:start", null);
}

属性文件(test.properties):

a = a

输出:

2015-09-03 14:38:01,740 | INFO  | route1           | Property: a
2015-09-03 14:38:01,743 | INFO  | CamelTest2       | Property: null

第一行来自.log("${properties:a}"),因此可以找到它。但是,String a = ex.getProperty("a", String.class);不能。两者都是属性并且指向相同的属性,对吧?

有什么区别,我怎样才能在处理器中找到属性?

1 个答案:

答案 0 :(得分:4)

Exchange仅在客户端接收请求时创建。这意味着您的Camel处理器只能访问Message而不能访问外部资源的属性。

Exchange的属性是Message的元信息。按照文档,

  

Exchange还将整个生命周期中的元数据存储为   可以使用各种getProperty(String)方法访问的属性。   setProperty(String, Object)用于存储属性。对于   例如,您可以使用它来存储安全性,SLA相关数据或任何   在整个处理过程中被视为有用的其他信息。