4

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

ExpensiveOrderFilter eof = new ExpensiveOrderFilter();

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

过滤器应该只Order在它们Order#getPrice()超过 100.00 美元时才允许。

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

filterCheapOrders方法需要是什么样子才能正确过滤掉“便宜”(< 100 美元)订单,防止它们被路由到direct:wherever?提前致谢!

4

1 回答 1

6

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

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的简单表达式语言,并跳过编写您的 bean:

.filter().simple("${body.price} < 100")
于 2013-01-25T14:29:15.203 回答