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?提前致谢!
这有两个部分.第一种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)
| 归档时间: |
|
| 查看次数: |
2561 次 |
| 最近记录: |