图例
说明
和过滤器类似,满足条件就会继续执行,否则后面的路由不会被执行
java事例
RouteBuilder builder = new RouteBuilder() {
public void configure() {
errorHandler(deadLetterChannel("mock:error"));
from("direct:a")
.filter(header("foo").isEqualTo("bar"))
.to("direct:b");
}
};
java事例,使用bean
from("direct:start")
.filter().method(MyBean.class, "isGoldCustomer").to("mock:result").end()
.to("mock:end");
public static class MyBean {
public boolean isGoldCustomer(@Header("level") String level) {
return level.equals("gold");
}
}
调用bean的某一个方法来决定是否需要往下继续执行
SpringXML事例,使用表达式
<camelContext errorHandlerRef="errorHandler" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:a"/>
<filter>
<xpath>$foo = 'bar'</xpath>
<to uri="direct:b"/>
</filter>
</route>
</camelContext>
SpringXMl事例,使用bean
<bean id="myBean" class="com.foo.MyBean"/>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:a"/>
<filter>
<method ref="myBean" method="isGoldCustomer"/>
<to uri="direct:b"/>
</filter>
</route>
</camelContext>
stop()
和filter不同,filter只针对他的孩子处理器,stop会完全过滤掉后面的所有路由消息
比如:下面的案例,如果Body中包含Bye字符串,就stop
from("direct:start")
.choice()
.when(body().contains("Hello")).to("mock:hello")
.when(body().contains("Bye")).to("mock:bye").stop()
.otherwise().to("mock:other")
.end()
.to("mock:result");