В данном репозитории представлен бэкенд-сервис для управления очередями задач с распределенной обработкой, написанный на языке Go. Пользователи могут создавать задачи, которые помещаются в очередь и обрабатываются воркерами. Система поддерживает отложенные задачи, повторы в случае неудачного выполнения задачи, а также отображает статус задач и историю выполнения.
Go- основной язык разработки;PostgreSQL- основное хранилище данных (пользователи, задачи, история);RabbitMQ- брокер сообщений между сервисами.
-
Task-API- сервер, отвечающий за:- Регистрация и аутентификация пользователей;
- CRUD-операции над задачами;
- Отправка задач в очередь на выполнение.
-
Task-Scheduler- планировщик, запускающийся раз в N мс (значение N указывается в конфигурационном файлеconfig.jsonи отправляющий задачи с отложенным запуском в очередь. -
Task-Worker- компонент, получающий задачи из очереди и выполняющий их. Система предусматривает наличие несколько воркеров, работающих параллельно (их число указывается в переменной окруженияNUMOFWORKERSв файле.env).
-
Клонируйте репозиторий
git clone https://github.com/imightbuyaboat/TaskFlow cd TaskFlow -
Создайте файл окружения
nano deployments/.env
со следующим содержимым:
POSTGRES_USER=your_user POSTGRES_PASSWORD=your_password POSTGRES_PORT=your_port POSTGRES_DB=your_database AMQP_USER=your_user AMQP_PASSWORD=your_password AMQP_PORT=your_port MAIL_HOST=your_mail_host MAIL_PORT=your_mail_port MAIL_USERNAME=your_username MAIL_PASSWORD=your_password SECRET_KEY=your_secret_key NUMOFWORKERS=3 HOST_FILE_PATH=your_host_file_path BASE_FILE_PATH=your_base_file_path
-
Запустите сервис командой:
docker compose -f deployments/docker-compose.yml --env-file deployments/.env up --build -d
В список поддерживаемых системой задач входят:
-
Отправка писем:
"type": "send_email", "payload": { "to": "recipient's email address", "subject": "subject", "body": "body", "attached_files": ["your files"] }
Поле
to, а также одно из полейsubject,body,attached_filesявляются обязательными. -
Обработка изображений:
"type": "process_image", "payload": { "path": "file_name", "blur": 1, "sharpen": 1, "gamma": 1, "contrast": 1, "brightness": 1, "saturation": 1, "grayscale": true, "invert": true }
Поле
pathявляется обязательным. Поляblur,sharpen,gammaмогут принимать только положительные значения. Поляcontrast,brightness,saturationмогут принимать значения из диапазона [-100; 100]. -
Скачивание файлов по url:
"type": "download_files", "payload": { "urls": ["your urls"] }
-
Регистрация
curl -X POST http://localhost:8080/api/register \ -H "Content-Type: application/json" \ -d '{"email": "example@example.com", "password": "example"}'
-
Вход
curl -X POST http://localhost:8080/api/login \ -H "Content-Type: application/json" \ -d '{"email": "example@example.com", "password": "example"}'
В ответе на этот запрос будет возвращен JWT токен, который необходимо указывать в заголовке
Authorizationдля всех последующих запросов. -
Получение всех задач пользователя
curl -X GET http://localhost:8080/api/tasks \ -H "Authorization: your_token" -
Получение задачи по ее
idcurl -X GET http://localhost:8080/api/tasks/task_id \ -H "Authorization: your_token"Где
task_id- это id задачи, возвращаемый после ее создания. -
Создание задачи
curl -X POST http://localhost:8080/api/tasks \ -H "Authorization: your_token" \ -H "Content-Type: application/json" \ -d '{ "type": "download_files", "payload": { "urls": ["https://go.dev/"] }, "max_retries": 3, "run_at": "2025-06-03T12:50:50Z" }'
Где
max_retries- положительное число, указывающее на количество повторов выполнения задачи при ее неудачном выполнении (по умолчанию равно 3),run_at- время начала выполнения задачи (задачи с отложенным выполнением имеют статусpostponed). Оба этих параметра являются необязательными при создании задачи.