2015-09-03 2 views
2

Может ли кто-нибудь объяснить мне различия между двумя свойствами?Разница верблюдов между свойствами маршрута и свойствами обмена

@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); не может. Оба являются свойствами и указывают на одно и то же свойство, не так ли?

В чем разница, и как я могу найти свойство в процессоре?

ответ

3

Exchange создан только при приеме запроса на стороне клиента. А это означает, что ваш процессор Camel будет иметь доступ только к Message, а не к ресурсу из внешнего ресурса.

Свойства Exchange - это метаинформация сообщения. Согласно документу,

Биржа также проводит мета-данные в течение всего срока его службы, хранящейся в свойства доступны с использованием различных методов getProperty(String). setProperty(String, Object) Используется для хранения недвижимости. Для примера вы можете использовать это для хранения данных безопасности, SLA или любых другая информация считающаяся полезной при обработке.

+1

И дополнительные - Свойства.a относится к свойству в файле свойств. Хотя exchangeProperty (частное имущество, которое устарело), ​​ссылается на свойство биржи. http://camel.apache.org/simple.html – J2B

+0

А, я вижу. Благодаря! Но есть ли возможность добавить весь файл свойств на биржу? – SLG

+0

Не совсем уверен. Но если вы используете Java DSL, у вас есть максимальная гибкость, не так ли? напишите метод, который может загрузить файл свойств с помощью простого свойства java: Свойства свойства = ..... и добавьте это свойство в обмен. Это должно быть просто :) –

Смежные вопросы