Разница между фильтром и выбором у верблюда - PullRequest
0 голосов
/ 15 мая 2018

В чем разница между фильтром и выбором в Apache Camel?

    from("direct:a")
        .choice()
            .when(header("foo").isEqualTo("bar"))
                .to("direct:b")
            .when(header("foo").isEqualTo("cheese"))
                .to("direct:c")
            .otherwise()
                .to("direct:d");

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Короче говоря, фильтр похож на один оператор java if, например

if x = 2 {
  ...
}

А у верблюда:

.filter(header("foo").isEqualTo("bar"))
  ...
.end()

И выбор подобен выражению java if ... elseif ... elseif ... else,

if x = 2 {
  ...
} else if x = 3 {
  ...
}

А у верблюда:

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

Обратите внимание, что otherwise необязательно в choice.

0 голосов
/ 16 мая 2018

Более того, Choice и filter выполняют ту же операцию, где в Filter есть дополнительное свойство Exchange , которое сообщит, отфильтровано оно или нет.

  1. Выбор доступен с версии 2.0
  2. Фильтр доступен с версии 2.5
...