【发布时间】:2019-10-30 20:52:46
【问题描述】:
我正在使用使用 Apache Camel spring-xml 路由编写的 Spring Boot 应用程序。很少有基于 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 集群上的主题并验证在测试中。
我的印象是我会在我的属性文件中将KAFKA_PORT 设置为 9092 并将 KAFKA_URL 设置为 localhost,以及将 FTP_URL 设置为 localhost 并将 FTP_PORT 设置为 2222(以及所需的其他属性) ,但这似乎并没有将我连接到嵌入式集群或 sftp 服务器..
让我的 Spring Boot 应用程序连接到这两个模拟实例并从那里运行其业务逻辑处理,我缺少哪一块拼图?
【问题讨论】:
-
这不仅仅是关于端口,您还需要确保使用正确的用户和密码来连接到那些模拟的服务器。此外,最好知道您如何运行测试以及错误消息/堆栈跟踪是什么样的。
-
在我的骆驼路由中连接时,我提供了与 SftpServer 相同的用户名和密码(因此,在本例中,用户名和密码用于连接)。该应用程序通常会正确连接到我们的实际 SFTP 服务器,因此我不确定该代码是否存在问题。现在我有一个非常简单的测试运行,启动 Spring Boot 应用程序(作为测试的常规部分),然后打印出“你好,世界!”并断言 1==1。在检查日志时,堆栈跟踪调用无法连接到两者,而通常它会打印出“以用户 ____ 身份连接到 sftp 服务器”
-
WARN o.a.c.c.file.remote.SftpConsumer - 自动创建目录时出错:filedirectory/filestoreadfrom 由于无法连接到 sftp://username@localhost:2222。忽略此异常。 org.apache.camel.component.file.GenericFileOperationFailedException:无法连接到 sftp://username@localhost:2222 原因:com.jcraft.jsch.JSchException:java.net.ConnectException:连接被拒绝(连接被拒绝)
标签: spring-boot apache-camel integration-testing citrus-framework