表达骆驼路线的最佳方式

时间:2013-06-14 14:43:22

标签: apache-camel

如果X为假,我想路由到A,如果X为真,我想路由到A和B

我试着写一些像

这样的东西
from(?)
.choice()
   .when( X )
      .multicast().to(A,B).end()
   .otherwise() // I get a (compile) error underlined here saying 'otherwise() is not on type ProcessorDefinition
      .to( A )

它不喜欢它 我怀疑这不是表达这个

的最佳方法

基本上我总是想路由到(A),如果那个条件在那里我也想路由到(B)

在Camel中表达这个的最佳方法是什么?

4 个答案:

答案 0 :(得分:6)

endChoice()条款的末尾使用when(),它会起作用......

请参阅http://camel.apache.org/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.html

答案 1 :(得分:1)

请参阅此常见问题解答,了解有关选择:https://camel.apache.org/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.html

您还可以使用动态收件人列表并计算要路由到的端点。然后,您可以根据条件返回1或2:http://camel.apache.org/recipient-list.html

答案 2 :(得分:0)

如果您始终希望您的消息转到路线A,请不要将其包含在选择条款

from(?)
.to( A )
.choice()
   .when( X )
      to(B).end()

上述情况应该足以满足您的要求。另请阅读克劳斯在答案中给出的文章。

关于编译错误,请删除when子句后的end()。 end()导致choice()子句完成,但是当choice已经关闭时你使用了otherwise()子句。

答案 3 :(得分:0)

我发现使用XML表示法表达你的路线更加简洁明了。

例如,对于Java DSL,人们经常犯错误,即不调用,甚至添加' endChoice()'和'结束()'就像你在你的榜样;有时你也会遇到Camel的Route Builder的问题,这是目前由于Java的泛型而受到的限制。

不幸的是,使用XML会带来使用XML的成本:)