【问题标题】:Camel filter method signatures骆驼过滤器方法签名
【发布时间】:2013-01-25 12:03:04
【问题描述】:

我有一个Order POJO,在我的 Camel 路线上,我想通过如下过滤器传递每个 Order 实例(消息):

ExpensiveOrderFilter eof = new ExpensiveOrderFilter();

from("direct:whatever")
    .filter().method(eof)
    .to("direct:wherever");

过滤器应该只允许Orders,但如果他们的Order#getPrice() 超过 100.00 美元。

public class ExpensiveOrderFilter {
    public void filterCheapOrders(Order order) {
        if(order.getPrice() < 100.00)
            ???
        else
            ???
    }
}

filterCheapOrders 方法需要是什么样子才能正确过滤掉“便宜”(direct:wherever?提前致谢!

【问题讨论】:

    标签: java apache-camel esb middleware


    【解决方案1】:

    这有两个部分。第一个是method(..) 是骆驼expression 的一种类型,称为谓词。您将调用的任何实际方法都需要返回一个布尔值,因此:

    public class ExpensiveOrderFilter {
        public boolean isCheapOrder(Order order) {
            return order.getPrice() < 100.00;
        }
    }
    

    Order 参数将由名为bean binding 的 Camel 机制以最佳尝试方式注入,该机制将尝试将消息正文转换为 Order。如果失败,路由会抛出异常。

    您在 method(..) 块中命名要在 bean 上调用的方法:

    .filter().method(eof, "isCheapOrder")
    

    只有便宜的订单才会继续。对于简单的表达式,您还可以考虑使用 Camel 内置的 simple 表达式语言,并跳过编写您的 bean:

    .filter().simple("${body.price} < 100")
    

    【讨论】:

    • 你在哪里将Order order 参数传递给isCheapOrder(Order order) 方法?那是“eof”吗?
    • eof 只是 ExpensiveOrderFilter 的一个实例。 Camel 将使用 bean 绑定 (camel.apache.org/bean-binding.html) 将 Exchange 的有效负载 (Order POJO) 传递到 order 参数中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多