Я пытаюсь переписать поток интеграции Spring с XML на Java. Я хочу маршрутизировать данные, отправленные по каналу:
@Bean(name = "sendData")
public MessageChannel getSendData() {
return MessageChannels.direct()
.get();
}
на два других канала:
@Bean(name = "sendDataA")
public MessageChannel getSendDataA() {
return MessageChannels.direct()
.get();
}
@Bean(name = "sendDataB")
public MessageChannel getSendDataB() {
return MessageChannels.direct()
.get();
}
в зависимости от их наличия.
У меня есть класс RoundRobinRouter
, который определяет, какой выходной канал использовать. У него есть метод route
, который возвращает имя выходного канала, например:
@Component
class RoundRobinRouter {
public String route(Object payload) {
/* implementation */
}
}
Обратите внимание, что реализация метода route
фактически не использует объект payload
. Ранее он был помещен в конфигурацию XML:
<int:router method="route" input-channel="sendData"
default-output-channel="sendDataA">
<bean
class="com.example.RoundRobinRouter"/>
</int:router>
Я уже пробовал использовать Java DSL IntegrationFlow
:
@Bean
@ServiceActivator(inputChannel = "sendData",
outputChannel = "sendDataA")
public IntegrationFlow routeRoundRobin() {
return router -> router.route(roundRobinRouter, "route");
}
Но я получал сообщение об ошибке «У диспетчера нет подписчиков» при вызове sendData.send(payload)
, по всей видимости, по следующей причине:
org.springframework.expression.spel.SpelEvaluationException: EL1004E: (поз. 8): Вызов метода: Метод configure (com.example.DataType) не может быть найден для типа com.example.Integration $$ Lambda $ 1/1018103616
Маршрутизатор - единственная лямбда в моем классе интеграции.