Начиная с некоторой версии, мы приняли решение привести поведение маршрутизатора Java DSL в соответствие со стандартной конфигурацией с аннотациями или XML.Таким образом, если мы отправляем на маршрутизатор, мы не можем ожидать ответа оттуда.Мы можем продолжить работу только с каналом в качестве выхода из подпотоков.
В вашем случае у вас есть .channel(eventOut)
в основном потоке.Итак, все ваши подпотоки маршрутизации должны отвечать именно этому каналу:
.<Event>handle((p, m) -> corners1H2HCustomBet.getCalculation(p))
.channel(eventOut)
.get();
Я думаю, .defaultOutputToParentFlow();
просто ничего не делает для вас, потому что у вас нет отображения по умолчанию.И это уже немного другая история: она не имеет никаких эффектов для других отображений.
Также обратите внимание на этот JavaDoc:
<code>/**
* Add a subflow as an alternative to a {@link #channelMapping(Object, String)}.
* {@link #prefix(String)} and {@link #suffix(String)} cannot be used when subflow
* mappings are used.
* <p> If subflow should refer to the external {@link IntegrationFlow} bean and
* there is a requirement to expect reply from there, such a reference should be
* wrapped with a {@code .gateway()}:
* <pre class="code">
* {@code
* .subFlowMapping(false, sf -> sf.gateway(evenFlow())))
* }
*
* @param key ключ.* @param subFlow subFlow.* @ вернуть роутер спец.* / public RouterSpecsubFlowMapping (K key, IntegrationFlow subFlow) {
Не относится к вашей конфигурации маршрутизации на основе каналов, но может быть полезно в будущем.
ОБНОВЛЕНИЕ
Вот пример (Kotlin) для subFlowMapping
и возврата в основной поток:
@Bean
fun splitRouteAggregate() =
IntegrationFlow { f ->
f.split()
.route<Int, Boolean>({ o -> o % 2 == 0 },
{ m ->
m.subFlowMapping(true) { sf -> sf.gateway(oddFlow()) }
.subFlowMapping(false) { sf -> sf.gateway(evenFlow()) }
})
.aggregate()
}
@Bean
fun oddFlow() =
IntegrationFlow { flow ->
flow.handle<Any> { _, _ -> "odd" }
}
@Bean
fun evenFlow() =
IntegrationFlow { flow ->
flow.handle<Any> { _, _ -> "even" }
}