services:
  rabbitmq:                               # Сервис для RabbitMQ (брокера сообщений)
    image: rabbitmq:3-management           # Используемый образ RabbitMQ с веб-интерфейсом управления
    ports:
      - "5672:5672"                        # Порт для подключения клиентов к RabbitMQ
      - "15672:15672"                      # Порт для доступа к веб-интерфейсу управления
    environment:                           # Переменные окружения для настройки RabbitMQ
      - RABBITMQ_DEFAULT_USER=guest        # Имя пользователя по умолчанию
      - RABBITMQ_DEFAULT_PASS=guest        # Пароль пользователя по умолчанию
    healthcheck:
      test: ["CMD", "rabbitmqctl", "status"]  # Проверка работоспособности RabbitMQ
      interval: 10s                          # Интервал между проверками (10 секунд)
      timeout: 5s                            # Тайм-аут для проверки (5 секунд)
      retries: 5                             # Количество попыток при неудачных проверках

  publisher:                                # Сервис для запуска издателя (publisher)
    build:
      context: .                             # Использует текущую директорию для сборки Docker-образа
    command: python publisher.py             # Команда для запуска издателя
    environment:
      - PYTHONUNBUFFERED=1                   # Отключение буферизации вывода Python
    depends_on:
      rabbitmq:
        condition: service_healthy           # Ожидает готовности RabbitMQ перед запуском

  consumer_1:                               # Сервис для запуска первого потребителя (consumer_1)
    build:
      context: .                             # Использует текущую директорию для сборки Docker-образа
    command: python consumer_1.py            # Команда для запуска первого потребителя
    environment:
      - PYTHONUNBUFFERED=1                   # Отключение буферизации вывода Python
    depends_on:
      rabbitmq:
        condition: service_healthy           # Ожидает готовности RabbitMQ перед запуском

  consumer_2:                               # Сервис для запуска второго потребителя (consumer_2)
    build:
      context: .                             # Использует текущую директорию для сборки Docker-образа
    command: python consumer_2.py            # Команда для запуска второго потребителя
    environment:
      - PYTHONUNBUFFERED=1                   # Отключение буферизации вывода Python
    depends_on:
      rabbitmq:
        condition: service_healthy           # Ожидает готовности RabbitMQ перед запуском