Ваша проблема здесь:
.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");
}