你的问题在这里:
.handle(message -> Arrays.asList(1, 2, 3))
如果您使用内联实现,它看起来像:
.handle(new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
Arrays.asList(1, 2, 3);
}
})
注意void
返回类型。由于没有什么可以返回,因此也没有什么可以发送到下游 -is a one-way 'MessageHandler'
.
要解决您的问题,您需要执行以下操作:
.handle((p, h) -> Arrays.asList(1, 2, 3))
这相当于:
.handle(new GenericHandler<Object>() {
@Override
public Object handle(Object p, Map<String, Object> h) {
return Arrays.asList(1, 2, 3);
}
})
实际上我的想法是说我的变体,例如:
这给了我一些暗示,表明我做错了什么。
UPDATE
工作代码:
@Bean
public IntegrationFlow parallelSplitRouteAggregateFlow() {
return IntegrationFlows
.from(Http.inboundGateway("/trigger"))
.handle((p, h) -> Arrays.asList(1, 2, 3))
.split()
.channel(MessageChannels.executor(Executors.newCachedThreadPool()))
.<Integer, Boolean>route(o -> o % 2 == 0, m -> m
.subFlowMapping(true, sf -> sf.gateway(oddFlow()))
.subFlowMapping(false, sf -> sf.gateway(evenFlow())))
.aggregate()
.get();
}
@Bean
public IntegrationFlow oddFlow() {
return flow -> flow.<Integer>handle((payload, headers) -> "odd");
}
@Bean
public IntegrationFlow evenFlow() {
return flow -> flow.<Integer>handle((payload, headers) -> "even");
}