Вводный пример JavaScript для неинициированных Testcontainers с использованием библиотеки amqplib
Тестконтейнеры — это здорово, но нет модуля RabbitMQ для Тестконтейнеров Node.js, и правильная настройка контейнера оказалась не такой интуитивной, как я ожидал… так что вот простой пример установки и установки тестовых контейнеров RabbitMQ. работает с использованием GenericContainer
вместе с соответствующей стратегией ожидания:
const { GenericContainer, Wait } = require('testcontainers'); const DEFAULT_RABBITMQ_PORT = 5672; const testRabbitMqContainer = async () => { let rabbitmqContainer; try { console.log(`Starting RabbitMQ container...`); rabbitmqContainer = await new GenericContainer('rabbitmq:latest') .withExposedPorts(DEFAULT_RABBITMQ_PORT) .withWaitStrategy(Wait.forLogMessage('Server startup complete')) .withStartupTimeout(30_000) .start(); const port = rabbitmqContainer.getMappedPort(DEFAULT_RABBITMQ_PORT); const host = rabbitmqContainer.getHost(); console.log(`Running RabbitMQ on ${host}:${port}...`); } finally { if (rabbitmqContainer) { console.log(`Stopping RabbitMQ container...`); await rabbitmqContainer.stop(); } } }; testRabbitMqContainer();
Для создания/потребления* сообщений на рассматриваемом сервере RabbitMQ с помощью amqplib:
const amqp = require('amqplib'); const { GenericContainer, Wait } = require('testcontainers'); const DEFAULT_RABBITMQ_PORT = 5672; const testRabbitMqContainer = async () => { let rabbitmqContainer; try { console.log(`Starting RabbitMQ container...`); rabbitmqContainer = await new GenericContainer('rabbitmq:latest') .withExposedPorts(DEFAULT_RABBITMQ_PORT) .withWaitStrategy(Wait.forLogMessage('Server startup complete')) .withStartupTimeout(30_000) .start(); const port = rabbitmqContainer.getMappedPort(DEFAULT_RABBITMQ_PORT); const host = rabbitmqContainer.getHost(); console.log(`Running RabbitMQ on ${host}:${port}`); console.log(`Configuring amqp client and queue...`); const conn = await amqp.connect(`amqp://${host}:${port}`); const channel = await conn.createChannel(); const queue = 'test-amqplib-topic'; const message = 'Hello World!'…