3

Orderインスタンスをルーティングする Camel ルートがあります。

from("direct:start")
    .choice()
        .when(order.getProduct() == Product.Widget)
            .to("direct:widgets")
        .when(order.getProduct() == Product.Fizz)
            .to("direct:fizzes")
        .otherwise()
            .to("direct:allOtherProducts");

特定Orderの が の注文である場合、 などWidgetにルーティングする必要があります。direct:widgets

私は各when(...)メソッドの中に何を入れるべきかについて窒息しています。私が持っているのは合法的な Camel DSL 構文ではなく、私が達成したいことを説明するために使用されます。

だから私は尋ねます:私が探している種類のルーティングを達成するために、各メソッドに何を入れますか? when(...)前もって感謝します!

4

2 に答える 2

4

order.getProduct() の値をヘッダーに入れて、そのように使用する必要があります::

from("direct:start")
        .choice()
            .when(header("product").isEqualTo(Product.Widget))
                .to("direct:widgets")
            .when(header("product").isEqualTo(Product.Fizz))
                .to("direct:fizzes")
            .otherwise()
                .to("direct:allOtherProducts");

編集 :

プロセスを使用できます(つまり、DSLで):

<route id="foo">
    <from uri="direct:start"/>
    <process ref="beanProcessor" />
    <choice>
        <when>
            ...
        </when>
        <when>
            ...
        </when>
        <otherwise>
            ...
        </otherwise>
    </choice>

ビーン宣言:

<bean id="beanProcessor" class="MyProcessor" />

クラス :

public class MyProcessorimplements Processor {

     @Override
     public void process(Exchange exchange) throws Exception {
         exchange.getIn().setHeader("headerName", yourOrderObject);
     }
}
于 2013-01-25T12:28:33.807 に答える
3

Order タイプはメッセージ本文だと思います。したがって、Java DSL では次のことができます。

from("direct:start")
  .choice()
     .when(body().isInstanceOf(MyOrder.class)).to("direct:myOrder")
     .when(body().isInstanceOf(MyOtheOrder.class)).to("direct:myOtherOrder")
     .otherwise().to("direct:other");
于 2013-01-25T17:54:58.377 に答える