Маршрутизатор может быть основан не только на типе полезной нагрузки или каком-либо заголовке. Вы действительно можете иметь общий вызов метода POJO для возврата канала, его имени или некоторого ключа маршрутизации, который отображается. Этот метод POJO действительно может проверить некоторое внутреннее состояние системы и создать тот или иной ключ маршрутизации.
Итак, у вас может быть что-то подобное в конфигурации маршрутизатора:
.route(myRouter())
где ваш myRouter
примерно такой:
@Bean
MyRouter myRouter() {
return;
}
и его внутренний код может быть таким:
public class MyRouter {
@Autowired
private SystemState systemState;
String route(Object payload) {
return this.systemState.isActive() ? "successChannel" : "backupChannel";
}
}
То же самое можно получить простым лямбда-определением:
.<Object, Boolean>route(p -> systemState().isActive(),
m -> m.channelMapping(true, "sucessChannel")
.channelMapping(false, "backupChannel"))
Кроме того ... * * 1016
private final AtomicBoolean switcher = new AtomicBoolean();
@Bean
public IntegrationFlow flow() {
return IntegrationFlows.from(() -> "foo", e -> e.poller(Pollers.fixedDelay(Duration.ofSeconds(5))))
.route(s -> switcher.get() ? "foo" : "bar")
.get();
}