Вводный пример 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!'…