У меня есть метод, который нужно выполнить несколько задач async'ly .. Мне удалось добиться того, что с помощью следующих IntegrationFlow:Spring Integration Java DSL - динамически назначает получателей RecepientListRouter?
@Bean
public IntegrationFlow startJobTask() {
return IntegrationFlows.from("TaskRoutingChannel")
.handle("jobService", "executeTasks")
.routeToRecipients(r -> r
.recipient("testTaskChannel")
.recipient("test2TaskChannel"))
.get();
}
@Bean ExecutorChannel testTaskChannel(){
return new ExecutorChannel(this.getAsyncExecutor());
}
@Bean ExecutorChannel test2TaskChannel(){
return new ExecutorChannel(this.getAsyncExecutor());
}
@Bean
public Executor getAsyncExecutor() {
SimpleAsyncTaskExecutor executor = new SimpleAsyncTaskExecutor();
return executor;
}
@Bean
public IntegrationFlow testTaskFlow() {
return IntegrationFlows.from("testTaskChannel")
.handle("testTaskService", "executeAsync")
.get();
}
@Bean
public IntegrationFlow test2TaskFlow() {
return IntegrationFlows.from("test2TaskChannel")
.handle("test2TaskService", "executeAsync")
.get();
}
выше потока в основном следующим образом:
TaskRoutingChannel
звонки метод ServiceActivator executeTasks
executeTasks
возвращает что-то вроде Message<List<myTask>>
это Message
направляется на каналы testTaskChannel
и test2TaskChannel
, который называет их собственные методы async serviceActivator.
Теперь проблема в том, что я не хочу жёстко каналов получателей. Я мог бы избежать жесткого кодирования с обычным маршрутизатором, установив канал назначения в качестве заголовка. Тем не менее, recepientListRouters, похоже, не имеют возможности получить имя канала получателя с помощью выражений.
Есть ли способ установить каналы получателей динамически?
Вау! это действительно опрятный трюк. Не знал об этом. Ура! – Ocelot