Асинхронный сервис для обработки задач c файлами с поддержкой очередей и управления статусами.
| Компонент | Технология |
|---|---|
| Язык программирования | Kotlin 2.1.10 |
| Фреймворк | Spring Boot 3.2.5 |
| ORM | Spring Data JPA (Hibernate) |
| База данных | PostgreSQL (H2 для тестирования) |
| Миграции | Liquibase |
| Документация API | SpringDoc OpenAPI (Swagger) |
| Сборка | Gradle 8.10 |
| Тестирование | JUnit 5, MockK, MockMVC, Testcontainers |
| Мониторинг | Spring Boot Actuator, Micrometer, Prometheus |
| Контейнеризация | Docker & Docker Compose |
- число одновременно выполняемых задач должно задаваться в конфиге
- задача должна переходить по статусам корректно
- ошибки обработки должны сохраняться
- должны быть фильтры по статусу, типу задачи, времени создания
- должна быть пагинация
- задачи должны обрабатываться асинхронно
- дополнительно:
- retry для упавших задач
- scheduler для поднятия “зависших” задач
- историю смены статусов
- приоритет задач
- отдельную таблицу событий по задаче
- метрики по времени выполнения
- JDK 21 или выше
- Gradle 8.10
- Docker и Docker Compose (для запуска PostgreSQL и самого приложения)
docker compose down
docker compose up --build -dПриложение будет доступно по адресу: http://localhost:8080
Swagger UI: http://localhost:8080/swagger-ui.html
- Создание задачи:
POST /api/v1/tasks
Content-Type: application/json
{
"fileName": "document.pdf",
"filePath": "/uploads/document.pdf",
"fileSize": 1024000,
"mimeType": "application/pdf",
"type": "DOCUMENT_PARSING",
"priority": 5
}- Получение задачи по ID:
GET /api/v1/tasks/{id}- Получение списка задач с фильтрами:
GET /api/v1/tasks?status=PENDING&type=IMAGE_PROCESSING&page=0&size=20- Отмена задачи:
DELETE /api/v1/tasks/{id}- Запуск обработки:
POST /api/v1/tasks/start-processing- Остановка обработки:
POST /api/v1/tasks/stop-processing- Статус обработки:
GET /api/v1/tasks/statusОсновные параметры в application.yml:
task-queue:
max-concurrent-tasks: 5 # Максимальное количество одновременно выполняемых задач
retry:
enabled: true # Включить/выключить автоматический retry
max-attempts: 3 # Максимальное количество попыток выполнения
backoff-delay-ms: 5000 # Задержка между попытками (миллисекунды)
scheduler:
enabled: true # Включить/выключить проверку зависших задач
stuck-task-timeout-minutes: 30 # Таймаут для определения "зависшей" задачи
check-interval-ms: 60000 # Интервал проверки зависших задач./gradlew test