我正在尝试使用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
机制(flow
或channel
)是否是强制性的,以保证使用filter()
方法生成回复消息?如果是,是否有更简单的方法来创建noop()
流?
感谢任何指点。
好吧,如果您的问题只是回复相同的输入有效负载,那么您的noop
将如下所示:
private static IntegrationFlow noop() {
return f -> f.bridge();
}
桥接是一个简单的直通请求-回复处理程序,如果没有输出通道,它会咨询replyChannel
标头。