Skip to content

About

RabbitMQ MiniO

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

Сервис Обработки Медиа (media-processor)

Go Version License: MIT

Этот сервис отвечает за загрузку и асинхронную обработку медиафайлов. Он состоит из двух компонентов: API-сервера, который принимает файлы, и воркера, который обрабатывает их в фоновом режиме. Для организации очереди заданий используется RabbitMQ, а для хранения файлов — MinIO.

Архитектура Проекта

Проект состоит из трех основных микросервисов, работающих вместе:

  • Сервис Аутентификации: Предоставляет аутентификацию пользователей. API обработчика медиа использует его для проверки прав пользователя на загрузку файлов.
  • Сервис Чата: Сервис для обмена сообщениями. Воркер обработчика медиа отправляет уведомления в чат после завершения обработки файла.
  • media-processor (Этот сервис): Управляет полным жизненным циклом загрузки медиа, от получения файла до уведомления пользователей о завершении.

Основные Возможности

  • Загрузка с аутентификацией: HTTP-ендпоинт для безопасной загрузки файлов, защищенный аутентификацией через auth-service.
  • Асинхронная обработка: При загрузке файла задание немедленно публикуется в очередь RabbitMQ, что позволяет API быстро отвечать на запросы.
  • Фоновый воркер: Отдельный процесс-воркер получает задания из очереди, выполняет "обработку" (в данном случае симулированную) и затем вызывает chat-app для уведомления соответствующей комнаты.
  • Объектное хранилище: Все загруженные медиафайлы хранятся в бакете объектного хранилища MinIO.

Стек Технологий

  • Язык: Go
  • Фреймворк API: Gin для HTTP-сервера.
  • Очередь сообщений: RabbitMQ для управления фоновыми задачами.
  • Объектное хранилище: MinIO для хранения медиафайлов.
  • Межсервисная коммуникация: gRPC (клиент) для связи с auth-service.
  • Логирование: slog (стандартная библиотека) для структурированного логирования.

Компоненты Сервиса

API Сервер (cmd/api)

  • Ендпоинт: POST /v1/upload
  • Описание: Принимает запросы multipart/form-data, содержащие file и roomId.
  • Логика:
    1. Аутентифицирует запрос с помощью auth-service.
    2. Загружает файл в MinIO.
    3. Публикует задание на обработку в очередь processing_jobs в RabbitMQ.

Воркер (cmd/worker)

  • Очередь: processing_jobs
  • Логика:
    1. Слушает и получает задания из очереди RabbitMQ.
    2. (Симулирует обработку файла).
    3. Отправляет HTTP POST-запрос на внутренний ендпоинт /notify сервиса chat-app для уведомления пользователей.

Как Запустить

Рекомендуемый Способ: Docker Compose

Самый простой и рекомендуемый способ запустить весь проект — использовать Docker Compose. Эта команда запустит и API, и воркер этого сервиса, а также все зависимости.

  1. Перейдите в корневой каталог проекта.
  2. Выполните команду:
    docker compose up --build

Локальная Разработка (Альтернатива)

  1. Требования:

    • Установленный Go 1.24+.
    • Запущенные экземпляры RabbitMQ и MinIO.
    • Запущенные экземпляры auth-service и chat-app.
  2. Настройте окружение: Создайте файл .env в каталоге media-processor:

    # Порт для API-сервера загрузок
    HTTP_PORT=8002
    
    # URL для подключения к RabbitMQ
    RABBITMQ_URL=amqp://user:password@localhost:5672/
    
    # Данные для подключения к MinIO
    MINIO_ENDPOINT=localhost:9000
    MINIO_ACCESS_KEY=minioadmin
    MINIO_SECRET_KEY=minioadmin
    MINIO_BUCKET_NAME=media
    MINIO_USE_SSL=false
    
    # Адрес gRPC-сервера auth-service
    AUTH_SERVICE_ADDR=localhost:50001
    
    # Адрес HTTP-сервера chat-app
    CHAT_APP_ADDR=http://localhost:8080
    
    # Секретный ключ для внутреннего API сервиса чата
    CHAT_APP_INTERNAL_API_KEY=your-internal-api-key
  3. Запустите сервисы: Вам нужно запустить и API, и воркер в разных терминалах.

    • Терминал 1 (API):
      go run ./cmd/api/main.go
    • Терминал 2 (Воркер):
      go run ./cmd/worker/main.go

About

RabbitMQ MiniO

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages