如果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中表达这个的最佳方法是什么?
答案 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的成本:)