Если вам нравится читать статьи на Medium и вы заинтересованы в том, чтобы стать участником, я буду рад поделиться с вами своей реферальной ссылкой!



Современные приложения часто требуют сложной оркестровки, особенно при работе с задачами с большим объемом данных и распределенными системами. В этой статье мы рассмотрим создание службы оркестратора с использованием языка программирования Go и веб-фреймворка Gin. Эта служба будет принимать загружаемые файлы, отправлять их в очередь RabbitMQ и заставлять рабочего прослушивать эту очередь для обработки и вставки данных в базу данных PostgreSQL.

В этой статье мы создадим следующий оркестратор и рабочие службы для обработки задач, отправляемых в очередь rabbitmq.

Служба оркестратора

Настройка и зависимости

Наша служба оркестратора использует два ключевых пакета:

  • github.com/gin-gonic/gin для веб-сервера.
  • github.com/rabbitmq/amqp091-go для взаимодействия с очередью RabbitMQ.

Сервисная архитектура

Сервис построен на основе структуры GinServer, которая содержит маршрутизатор Gin. Маршрутизатор инициализируется маршрутами, которые сопоставляются с определенными функциями обработчика. Для нашего оркестратора существует единственная конечная точка /submit для загрузки файлов.

Когда файл отправляется в конечную точку /submit, происходит следующее:

  1. Файл сохраняется в локальной файловой системе.
  2. Абсолютный путь сохраненного файла отправляется в очередь RabbitMQ.

Взаимодействие RabbitMQ

Функция SendToQueue подключается к экземпляру RabbitMQ и отправляет сообщение в очередь 'filepaths'. Сообщение представляет собой просто абсолютный путь к загруженному файлу.

Запуск оркестратора