3

如果 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)

用骆驼表达这一点的最佳方式是什么?

4

4 回答 4

6

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

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

于 2013-06-14T15:47:54.290 回答
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

于 2013-06-14T15:48:01.537 回答
0

如果你总是希望你的消息去路由 A,那么不要将它包含在选择子句中

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

像上面这样的东西应该足够你的情况了。还阅读克劳斯在他的回答中给出的文章。

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

于 2013-06-17T06:54:40.520 回答
0

我发现使用 XML 表示法表达您的路线在含义上要简洁得多。

例如,对于 Java DSL,人们经常犯的错误是不调用,甚至像您在示例中那样添加 'endChoice()' 和 'end()';有时您还会遇到 Camel 的 Route Builder 的问题,目前由于 Java 的泛型,这是一个限制。

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

于 2013-06-18T20:35:03.453 回答