Skip to content

Масштабируемый и асинхронный сервис очереди задач на Go.


Notifications You must be signed in to change notification settings

AlexandrTomashevich/Task_Queue_Service

Repository files navigation

Task Queue Service

Это простой сервис очереди задач, написанный на Go, который позволяет добавлять задачи арифметической прогрессии в очередь и асинхронно их обрабатывать. Задачи обрабатываются пулом воркеров, и вы можете получать отсортированный список задач и их статусы выполнения.

Описание Проекта

Сервис имеет следующие возможности:

  • Добавление Задачи: Вы можете добавлять задачи арифметической прогрессии в очередь, отправляя POST-запрос на эндпоинт /add. Задача будет обработана сервисом асинхронно.
  • Список Задач: Вы можете получать отсортированный список задач и их статусы выполнения, отправляя GET-запрос на эндпоинт /list.
  • Обработка Задач: Задачи обрабатываются пулом воркеров. Вы можете указать количество воркеров (N) при запуске сервиса.
  • Очистка Результатов: После завершения задачи ее результат временно сохраняется с учетом времени жизни (TTL). По истечении TTL результат автоматически удаляется.

Запуск сервиса

  1. Клонируйте этот репозиторий: git clone https://github.com/AlexandrTomashevich/Task_Queue_Service.git
  2. Перейдите в директорию проекта: cd task-queue-service
  3. Соберите проект: go build
  4. Запустите сервис с желаемым количеством воркеров (N): (по default значение = 5) ./task-queue-service -N

Отправка и получение результата запроса (тестирование)

Чтобы добавить задачу в очередь, отправьте POST-запрос на эндпоинт /add с JSON-параметрами задачи. Вот пример с использованием curl: curl -X POST -d '{"N": 5, "D": 2, "N1": 1, "I": 0.5, "TTL": "10s"}' http://localhost:8000/add

  • N: Количество итераций в арифметической прогрессии.
  • D: Разница между каждым членом прогрессии.
  • N1: Первый член прогрессии.
  • I: Интервал времени между каждой итерацией (в секундах).
  • TTL: Время жизни результата.

Чтобы получить список задач и их статусы выполнения, отправьте GET-запрос на эндпоинт /list. Вот пример с использованием curl: curl http://localhost:8000/list

Ответ будет представлять собой JSON-массив с отсортированным списком задач и их статусами.

Пример ответа

Image screen

Зависимости

  • sync: Для управления конкурентностью.
  • sync/atomic: Для атомарных операций.
  • time: Для работы с временем.
  • encoding/json: Для кодирования и декодирования данных JSON.
  • net/http: Для создания HTTP-сервера.

Releases

No releases published

Packages

No packages published

Languages