3

我有一个路由Order实例的骆驼路由:

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是 a 的订单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 回答