【发布时间】:2018-04-08 01:45:01
【问题描述】:
我的 maven POM 文件创建带有测试服务的 docker 容器。它还运行必须与这些容器中的服务对话的测试。容器可以使用在docker-compose.yml 文件中定义为链接的主机名相互通信,例如:
kafka:
image: spotify/kafka
hostname: kafka
environment:
ADVERTISED_HOST: kafka
ADVERTISED_PORT: 9092
ports:
- "9092:9092"
our_service:
build: ../../logstash/
ports:
- "8081:8080"
links:
- kafka
这是因为,每个容器的/etc/hosts 文件都包含指向集群中其他容器的链接的条目。但是,在运行 Maven 测试的集群之外,/etc/hosts 没有更新,我不希望它更新,因为它将在 Jenkins CI 上运行。
当然,我的测试可以通过 localhost:9092 与 Kafka 通信,但 Kafka 要求生产者连接到 kafka 主机,而不是 localhost,如果它以 kafka 名称进行广告。
我该如何解决这个问题:
- 也可以在 docker 容器中运行 Maven 测试,但这需要 Maven 项目运行另一个 Maven 项目。
- 在运行时以编程方式更新 JVM 的 DNS 缓存。
对我来说,两者似乎都是一个肮脏的解决方案。
【问题讨论】:
-
也许我误解了你的设置,但你在做什么样的测试?您是在尝试测试与 kafka 的通信还是尝试测试您的应用程序?如果是这样,为什么需要卡夫卡?你不能使用模拟等吗?
-
@khmarbaise 我有一个应用程序 A 从 Kafka 读取数据,对其进行转换并发送到另一个应用程序 B。在我的测试中,我模拟了应用程序 B 以验证它是否收到了正确的数据。跨度>