私のMaven POMファイルは、テスト用のサービスを持つドッカーコンテナを作成します。また、これらのコンテナ内のサービスと対話する必要のあるテストを実行します。コンテナはdocker-compose.yml
ファイルにリンクとして定義されたホスト名、例えばを使用して、お互いに話すことができます。:ドッカーコンテナと通信するときにローカルの/ etc/hostsを更新する
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はカフカ名で宣伝していれば、ローカルホストではなく、カフカホストに接続する必要があります。同様ドッキングウィンドウコンテナ内
- 実行Mavenのテストが、それは別のMavenプロジェクトを実行するためのMavenプロジェクトが必要になります。私は、この問題を解決するにはどうすればよい
。
- 実行時にJVMのDNSキャッシュをプログラムによって更新します。
どちらも私にとっては汚い解決策のようです。
多分私はあなたのセットアップを誤解しますが、どのようなテストをしていますか?あなたはkafkaへのコミュニケーションをテストしようとしているのですか、あるいはあなたのアプリケーションをテストしようとしていますか?もしそうなら、なぜカフカが必要ですか?モックなどは使用できませんか? – khmarbaise
@khmarbaise私はKafkaからデータを読み取り、それらを変換して別のアプリケーションBに送信するアプリケーションAを持っています。私のテストでは、適切なデータを受け取ったかどうかを確認するためにアプリケーションBを偽っています。 – dzieciou