java 请求-应答流中 predicate 为false时的Spring-Integration过滤器

0vvn1miw  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(113)

我尝试使用filter()来有条件地执行某些代码,但总是在请求-应答流中返回应答。
例如,在Spring-Integration 5.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()流?
谢谢你的指点。

kwvwclae

kwvwclae1#

好吧,如果你的问题只是回复相同的输入负载,那么你的noop看起来会像这样:

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

网桥是一个简单的直通请求-应答处理程序,如果没有输出通道,它将查询replyChannel头。

相关问题