Apache верблюд фильтровать и отправлять на другой маршрут - PullRequest
0 голосов
/ 12 июля 2020

Я хочу отфильтровать по заголовку. Если какое-то свойство не равно нулю, отправьте данные из этого свойства по другому маршруту.

from(SAVE_RECEIVED_IDS)
    .process(exchange -> {
        //here i set true for filters because there is faulty data
        exchange.getIn().setFault(true); //for PROCESS_FAULTY route
    
        //if filter catches, it should get and send this but it does not come here
        exchange.setProperty("faultyOnes","somearraylistOrData"); //for PROCESS_FAULTY route
    
        exchange.setProperty("other fields irrelevant to faulty","somearraylistOrData");//for route GO_NEXT_ROUTE
    })
    //here i neeed to filter if value is ture
    
    .filter(exchange -> exchange.getIn().isFault()) //it does not come here
        .to(PROCESS_FAULTY)
    .end() //end for filter
    
    .to(GO_NEXT_ROUTE) //if there is no faulty come here. if there is faulty, after send come here.
    .end() //end from()

или мне следует использовать выбор, и когда?

.choice()
  .when(header("foo").isEqualTo("bar"))
    ...
  .when(header("foo").isEqualTo("chese"))
    ...
  .otherwise()
    ....
.end(),

вот так? Я использую isFaulty, но заголовки лучше или свойства? Но где хранить ошибочные данные? Спасибо за ответы

1 Ответ

0 голосов
/ 13 июля 2020

Во-первых, будьте осторожны при установке сообщения как ошибочного. Это в первую очередь предназначено для неисправимых ошибок, которые должны запускать процедуры восстановления после ошибок.

заголовки лучше или свойства? Но где мне хранить ошибочные данные?

Взгляните на Передача значений между процессорами в apache camel , а также go через следующий ответ Клауса в той же теме . В частности, свойства надежно сохраняются на протяжении всего времени обработки сообщения в Camel. Напротив, заголовки являются частью протокола сообщений и не могут передаваться во время маршрутизации (цитируется форма ответа Клауса) - короче говоря, свойства лучше подходят, особенно если ваше сообщение также передается по протоколам (http, jms et c). Поэтому используйте свойства для хранения ошибочных данных.

...