Я работаю с приложением Spring Boot, написанным с использованием маршрутов Apache Camel spring-xml. Существует очень мало основанной на Java логики приложения, и она почти полностью написана на xml и основана на различных верблюжьих маршрутах.
Маршруты настроены для подключения к различным средам и системам через файлы свойств с использованием свойства, такого как KAFKA_URL and KAFKA_PORT
. Внутри одного из реализованных маршрутов приложение подключается к следующему и получает / генерирует на него сообщения:
<to id="route_id_replaced_for_question" uri="kafka:{{env:KAFKA_URL:{{KAFKA_URL}}}}:{{env:KAFKA_PORT:{{KAFKA_PORT}}}}?topic={{env:KAFKA_TOPIC:{{topic_to_connect_to}}}}&kerberosRenewJitter=1&kerberosRenewWindowFactor=1&{{kafka.ssl.props}}&{{kafka.encryption.props}}"/>
Кроме того, мы подключаемся к SFTP-серверу, который я также пытаюсь смоделировать с помощью Citrus. Это происходит по аналогичной схеме:
<from id="_requestFile" uri="{{env:FTP_URL:{{FTP_URL}}}}:{{env:FTP_PORT:{{FTP_PORT}}}}/{{env:FTP_FILE_DIR:{{FTP_FILE_DIR}}}}/?delete=true&fileExist=Append&password={{env:FTP_PASSWORD:{{FTP_PASSWORD}}}}&delay={{env:FTP_POLL_DELAY:{{FTP_POLL_DELAY}}}}&username={{env:FTP_USER:{{FTP_USER}}}}"/>
Внутри моего интеграционного теста я настроил класс Citrus 'EmbeddedKafkaServer следующим образом:
@Bean
public EmbeddedKafkaServer embeddedKafkaServer() {
return new EmbeddedKafkaServerBuilder()
.kafkaServerPort(9092)
.topics("topic_to_connect_to")
.build();
}
и сервер Citrus FTP с:
@Bean
public SftpServer sftpServer() {
return CitrusEndpoints.sftp()
.server()
.port(2222)
.autoStart(true)
.user("username")
.password("passwordtoconnectwith")
.userHomePath("filedirectory/filestoreadfrom")
.build();
}
В идеале мой тест будет подключаться к серверу фиктивного sftp, и я отправлю файл в соответствующий каталог с помощью Citrus, который мое приложение затем прочитает, обработает и опубликует в теме навнедрите кафку кластера и проверьте в тесте.
У меня сложилось впечатление, что я установлю KAFKA_PORT
на 9092 и KAFKA_URL
на localhost, а также FTP_URL
на localhost и FTP_PORT
на 2222 (среди прочих необходимых свойств) внутримой файл свойств, но, похоже, он не связывает меня со встроенным кластером или серверами sftp.
Какая часть головоломки мне не хватает, чтобы мое приложение с загрузочной пружиной подключилось к обоим этим имитированным экземплярам и запустилосьего обработка бизнес-логики оттуда?