Использование Citrus для макета SFTP и Kafka для тестирования интеграции Spring-Boot на основе Apache-Camel XML-маршрутов? - PullRequest
0 голосов
/ 30 октября 2019

Я работаю с приложением 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}}}}&amp;kerberosRenewJitter=1&amp;kerberosRenewWindowFactor=1&amp;{{kafka.ssl.props}}&amp;{{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&amp;fileExist=Append&amp;password={{env:FTP_PASSWORD:{{FTP_PASSWORD}}}}&amp;delay={{env:FTP_POLL_DELAY:{{FTP_POLL_DELAY}}}}&amp;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.

Какая часть головоломки мне не хватает, чтобы мое приложение с загрузочной пружиной подключилось к обоим этим имитированным экземплярам и запустилосьего обработка бизнес-логики оттуда?

1 Ответ

0 голосов
/ 01 ноября 2019

Я решил эту проблему - это было связано с использованием очень старой версии Kafka (1.0.0 или более ранней), в которой отсутствовали некоторые методы, вызываемые при попытке Citrus создавать новые темы. Если кто-то сталкивается с подобной проблемой при использовании Citrus, я рекомендую начать с оценки версии Kafka, в которой работает ваша служба, и определить, нужно ли ее обновлять.

Для соединения sftp сервер или клиент не подключались автоматически и поэтому никогда не запускались.

...