10.2.2 过滤器

过滤器可以放置在集成管道的中间,以允许或不允许消息进入流中的下一个步骤(如图 10.3)。

图 10.3 基于某些条件的过滤器允许或不允许消息在管道中继续。

例如,假设包含整数值的消息通过名为 numberChannel 的通道发布,但是只希望偶数传递到名为 evenNumberChannel 的通道。在这种情况下,可以使用 @Filter 注解声明一个过滤器,如下所示:

@Filter(inputChannel="numberChannel",
    outputChannel="evenNumberChannel")
public boolean evenNumberFilter(Integer number) {
  return number % 2 == 0;
}

或者,如果您使用 Java DSL 配置风格来定义集成流,您可以这样调用 filter()

@Bean
public IntegrationFlow evenNumberFlow(AtomicInteger integerSource) {
  return IntegrationFlows
    ...
    .<Integer>filter((p) -> p % 2 == 0)
    ...
    .get();
}

在本例中,使用 lambda 表达式实现过滤器。但是,事实上,filter() 方法是接收一个 GenericSelector 作为参数。这意味着可以实现 GenericSelector 接口,而不是引入一个简略的 lambda 表达式实现过滤。

results matching ""

    No results matching ""