Ожидание запуска docker-контейнера RabbitMQ с помощью 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>

В настоящий момент ИТ-службы начинают работать, пока RabbitMQ все еще инициализируется и дает сбой, поскольку сервер недоступен.

2 ответа

Решение

Мне удалось найти более настойчивый способ проверки статуса RabbitMQ. Как я использую rabbitmq:3.6.10-management Изображение докера, я могу проверить, что URL управления на localhost:15672 вверх:

<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 секунд.

"При запуске контейнера возможно заблокировать выполнение, пока не будет выполнено какое-то условие"

https://dmp.fabric8.io/

Вы можете wait для некоторого вывода журнала из контейнера RabbitMQ с log:

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.

Другие вопросы по тегам