提问者:小点点

Spring-集成在请求-回复流中谓词为false时过滤


我正在尝试使用filter()来有条件地执行某些代码,但总是在请求-回复流中返回回复。

例如,在Spring-Integration5.5.17中,在IntegrationFlow中,我可以有条件地将奇数整数有效负载乘以2。

    @Bean(name = "sendsEvenValuesWorksFlow")
    IntegrationFlow sendEvenValuesWorksFlow() {
        return IntegrationFlows.from("sendsEvenValuesWorksChannel")
                               .filter("(payload % 2) == 1", filterSpec -> filterSpec.discardFlow(noop()))
                               .transform("payload * 2")
                               .get();
    }

    private static IntegrationFlow noop() {
        return f -> f.filter("true");
    }

其中过滤器有一个什么都不做的discardFlow

但我认为有一种更简单的方法可以使用当前有效负载继续流。例如,以下方法不起作用,因为它不产生输出消息:

    @Bean(name = "sendsEvenValuesFailsFlow")
    IntegrationFlow sendEvenValuesFailsFlow() {
        return IntegrationFlows.from("sendsEvenValuesFailsChannel")
                               .filter("(payload % 2) == 1")
                               .transform("payload * 2")
                               .get();
    }

discard机制(flowchannel)是否是强制性的,以保证使用filter()方法生成回复消息?如果是,是否有更简单的方法来创建noop()流?

感谢任何指点。


共1个答案

匿名用户

好吧,如果您的问题只是回复相同的输入有效负载,那么您的noop将如下所示:

private static IntegrationFlow noop() {
    return f -> f.bridge();
}

桥接是一个简单的直通请求-回复处理程序,如果没有输出通道,它会咨询replyChannel标头。