【发布时间】:2018-08-01 18:10:29
【问题描述】:
我是骆驼的新手,如果这个问题很愚蠢,我很抱歉,但可以说我有一个骆驼分离器,它迭代数据库中的一些对象。我想问一下骆驼分离器中是否有类似继续的东西。假设我在正文中有一个像 {1,2,3,4} 这样的数字数组,我想打印数字,但我不想打印数字 3。我知道我可以使用选择,但在某些情况下继续会是更好的选择。非常感谢。
【问题讨论】:
标签: apache-camel continue splitter
我是骆驼的新手,如果这个问题很愚蠢,我很抱歉,但可以说我有一个骆驼分离器,它迭代数据库中的一些对象。我想问一下骆驼分离器中是否有类似继续的东西。假设我在正文中有一个像 {1,2,3,4} 这样的数字数组,我想打印数字,但我不想打印数字 3。我知道我可以使用选择,但在某些情况下继续会是更好的选择。非常感谢。
【问题讨论】:
标签: apache-camel continue splitter
在这种情况下,我会使用Message Filter EIP,或者与filter(Predicate) 或stop() 一起使用
使用filter:
from("direct:filter3")
.split(body())
.filter(body().isNotEqualTo(3))
.to("log:splitted");
使用stop:
from("direct:stop3")
.split(body())
.choice().when(body().isEqualTo(3)).stop().end()
.to("log:splitted");
【讨论】:
stop 时,它会将当前交换标记为使用属性Exchange.ROUTE_STOP 完成。这不应该在 Splitter 之外传播。也许您正在使用自定义聚合器,并且您已将 Exchange.ROUTE_STOP 属性传播到父交换。或者你在不同的上下文中使用过它,因为 Consumer、Endpoint、CamelContext、Service……所有这些类都有其stop 方法,但用途不同。