我尝试使用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
机制(flow
或channel
)才能保证使用filter()
方法生成应答消息?如果是,有没有更简单的方法来创建noop()
流?
谢谢你的指点。
1条答案
按热度按时间kwvwclae1#
好吧,如果你的问题只是回复相同的输入负载,那么你的
noop
看起来会像这样:网桥是一个简单的直通请求-应答处理程序,如果没有输出通道,它将查询
replyChannel
头。