【问题标题】:Apache camel continue in splitter阿帕奇骆驼继续分离器
【发布时间】:2018-08-01 18:10:29
【问题描述】:

我是骆驼的新手,如果这个问题很愚蠢,我很抱歉,但可以说我有一个骆驼分离器,它迭代数据库中的一些对象。我想问一下骆驼分离器中是否有类似继续的东西。假设我在正文中有一个像 {1,2,3,4} 这样的数字数组,我想打印数字,但我不想打印数字 3。我知道我可以使用选择,但在某些情况下继续会是更好的选择。非常感谢。

【问题讨论】:

    标签: apache-camel continue splitter


    【解决方案1】:

    在这种情况下,我会使用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");
    

    【讨论】:

    • @Bedia 谢谢你的回答。我有个问题。当我使用 stop 时,它有时会停止整个路线,即使我在分路器中。你不知道什么时候 stop() 停止整个路线,什么时候只有实际消息?谢谢。
    • 我从未见过这种行为。使用拆分器时,Camel 会为每个拆分创建新的 Exchange。当您使用stop 时,它会将当前交换标记为使用属性Exchange.ROUTE_STOP 完成。这不应该在 Splitter 之外传播。也许您正在使用自定义聚合器,并且您已将 Exchange.ROUTE_STOP 属性传播到父交换。或者你在不同的上下文中使用过它,因为 Consumer、Endpoint、CamelContext、Service……所有这些类都有其stop 方法,但用途不同。
    • 你绝对完美,我有自定义聚合器,当我的路由在数据库中只找到一个项目时,我在拆分器中调用了此项目的停止,我的聚合副本 newExchange 到 oldExchange 并且此停止传播到外部的分离器。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2013-02-09
    • 2018-11-27
    相关资源
    最近更新 更多