等待 RabbitMQ docker 容器以 docker-maven-plugin 启动



如何告诉docker-maven-plugin等待 RabbitMQ 容器完全启动后再运行集成测试?

这是我在pom.xml中使用的插件配置:

<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<executions>
<execution>
<id>start-rabbitmq-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<images>
<image>
<alias>rabbitmq</alias>
<name>rabbitmq:3.6.10-management</name>
<run>
<log>
<prefix>RABBITMQ</prefix>
<color>cyan</color>
</log>
<namingStrategy>alias</namingStrategy>
<ports>
<port>5672:5672</port>
<port>15672:15672</port>
</ports>
</run>
</image>
</images>
</configuration>
</execution>
<execution>
<id>stop-rabbitmq-container</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>

目前,IT开始执行,而RabbitMQ仍在初始化并失败,因为服务器不可用。

"在启动容器时,是否可以阻止执行,直到满足某些条件">

https://dmp.fabric8.io/#start-wait

您可以使用logwaitRabbitMQ 容器的一些日志输出:

Regular expression which is applied against the log output of an container and blocks until the pattern is matched. You can use (?s) in the pattern to switch on multi line matching.

我设法找到了一种更自信的方式来检查 RabbitMQ 的状态。当我使用rabbitmq:3.6.10-managementdocker 映像时,我可以检查localhost:15672上的管理 url 是否已启动:

<wait>
<http>
<url>http://localhost:15672</url>
<method>GET</method>
<status>200..399</status>
</http>
<time>10000</time>
</wait>

wait配置将检查获取管理 url 的返回值,最长为 10 秒,直到它在指定的 HTTP 响应状态范围内,但 RabbitMQ 通常会在 2 到 3 秒内启动。

相关内容

  • 没有找到相关文章

最新更新