Если вам нравится читать статьи на Medium и вы заинтересованы в том, чтобы стать участником, я буду рад поделиться с вами своей реферальной ссылкой!
Современные приложения часто требуют сложной оркестровки, особенно при работе с задачами с большим объемом данных и распределенными системами. В этой статье мы рассмотрим создание службы оркестратора с использованием языка программирования Go и веб-фреймворка Gin. Эта служба будет принимать загружаемые файлы, отправлять их в очередь RabbitMQ и заставлять рабочего прослушивать эту очередь для обработки и вставки данных в базу данных PostgreSQL.
В этой статье мы создадим следующий оркестратор и рабочие службы для обработки задач, отправляемых в очередь rabbitmq.
Служба оркестратора
Настройка и зависимости
Наша служба оркестратора использует два ключевых пакета:
github.com/gin-gonic/gin
для веб-сервера.github.com/rabbitmq/amqp091-go
для взаимодействия с очередью RabbitMQ.
Сервисная архитектура
Сервис построен на основе структуры GinServer
, которая содержит маршрутизатор Gin. Маршрутизатор инициализируется маршрутами, которые сопоставляются с определенными функциями обработчика. Для нашего оркестратора существует единственная конечная точка /submit
для загрузки файлов.
Когда файл отправляется в конечную точку /submit
, происходит следующее:
- Файл сохраняется в локальной файловой системе.
- Абсолютный путь сохраненного файла отправляется в очередь RabbitMQ.
Взаимодействие RabbitMQ
Функция SendToQueue
подключается к экземпляру RabbitMQ и отправляет сообщение в очередь 'filepaths'. Сообщение представляет собой просто абсолютный путь к загруженному файлу.