骆驼过滤方法签名

IAm*_*aja 4 java middleware esb apache-camel

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

ExpensiveOrderFilter eof = new ExpensiveOrderFilter();

from("direct:whatever")
    .filter().method(eof)
    .to("direct:wherever");
Run Code Online (Sandbox Code Playgroud)

如果过滤器的价格超过100美元,Order那么过滤器应该只允许使用Order#getPrice().

public class ExpensiveOrderFilter {
    public void filterCheapOrders(Order order) {
        if(order.getPrice() < 100.00)
            ???
        else
            ???
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jak*_*rab 6

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

public class ExpensiveOrderFilter {
    public boolean isCheapOrder(Order order) {
        return order.getPrice() < 100.00;
    }
}
Run Code Online (Sandbox Code Playgroud)

Order参数将通过称为bean绑定的Camel机制进行最佳尝试,该机制将尝试将消息正文转换为Order.如果失败,该路由将抛出异常.

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

.filter().method(eof, "isCheapOrder")
Run Code Online (Sandbox Code Playgroud)

只有廉价订单才会继续.对于简单的表达式,您可能还会考虑Camel中内置的简单表达式语言,并跳过编写bean:

.filter().simple("${body.price} < 100")
Run Code Online (Sandbox Code Playgroud)