Непонятно, зачем создавать IntegrationFlow
во время выполнения, а затем решил изменить его позже ... Однако это не имеет значения. Вы должны понять для себя, что IntegrationFlow
это просто логический компонент конфигурации. Он ничего не делает во время выполнения, во время обработки сообщений. Что я хочу сказать, что во время выполнения у нас есть группа активных компонентов, которые ничего не знают о IntegrationFlow
, создавшем их. Они уже связаны друг с другом с использованием принципов EIP - каналов, конечных точек, программ опроса и т. Д. c.
Конечно, эти компоненты являются гибкими и могут быть настроены во время выполнения, но определенно не IntegrationFlow
создал их. Я имею в виду, что вы можете подписаться и отписаться на / из каналов во время выполнения, используя их контракт. Или вы можете добавить (end remove - stop()
it) конечную точку опроса в существующую QueueChannel
. Все остальные компоненты не будут затронуты. Принцип слабой связи является одним из основных пунктов решения EIP.
Итак, что вы спрашиваете о Dynami c .handle()
или .transform()
больше о подписке на новые потребители к существующим каналам. Поскольку это довольно сложно сделать самостоятельно (вам нужно немного углубиться в основы Spring), вы все равно можете использовать упомянутый IntegrationFlowContext.registration())
. Вам нужно иметь имя канала из своего исходного потока в конце и использовать этот канал (или его имя) для создания нового IntegrationFlow
с необходимыми .handle()
или .transform()
logi c:
IntegrationFlow integrationFlow =
IntegrationFlows
.from(confGateway(pathOfEndpoint))
.<Map<String,String>>handle((p, h) -> {
return doSomething(p);
})
.channel("mainChannel")
.get();
...
IntegrationFlow otherFlow =
IntegrationFlows
.from("mainChannel")
.transform(...)
.get();