我有一个路由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(...)
方法中放置了什么来完成我正在寻找的路由类型?提前致谢!
答案 0 :(得分: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声明:
<bean id="beanProcessor" class="MyProcessor" />
班级:
public class MyProcessorimplements Processor {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader("headerName", yourOrderObject);
}
}
答案 1 :(得分:3)
我认为订单类型是邮件正文。所以在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");